显然有点心不在焉,我写了something like如下: {-# LANGUAGE ConstraintKinds #-}
{-# LANGUAGE TypeFamilies #-}
class Foo f where
type Bar f :: *
retbar :: Bar f -> IO f
type Baz f = (Foo f, Eq f)
我几乎没有成功地围绕ad包中涉及的基本管道类型进行操作。例如,下面的工作完美: import Numeric.AD
ex :: Num a => [a] -> a
ex [x, y] = x + 2*y
> grad ex [1.0, 1.0]
[1.0, 2.0]
其中grad的类型是: grad
:: (Num a, Traversable f) =>
(f
我可以写: {-# LANGUAGE RankNTypes #-}
{-# LANGUAGE FlexibleInstances #-}
{-# LANGUAGE UndecidableInstances #-}
{-# LANGUAGE ConstraintKinds #-}
f :: Integral a => (forall b. Num b => b) -> a
f = id
我正在研究一个包含monoid的applicative函数来“查看”执行。然而,有时候我根本不关心这个部分,所以幺半群的选择是不相关的,因为它永远不会被消耗。我已经简化我有什么到: {-# LANGUAGE FlexibleInstances #-}
{-# LANGUAGE ConstraintKinds #-}
{-# LANGUAGE MultiParamTypeClasses #-}
我只想 class Trivial t
instance Trivial t
当然这是在Haskell 98没用的,因为你可以省略约束;但与ConstraintKinds我们可以有明确要求种类* -> Constraint的参数。理想情况下,我想将其定义为“匿名类型级别函数”\type a ->(),但这显然不可行。 我应该怎么做,用的东西预定义或只是定义本地该类权,我需要它(因为没有人需要
我一直在玩一些GHC扩展定义一个函数参数的函数,可以做到以下几点: let a = A :: A -- Show A
b = B :: B -- Show B
in
myFunc show a b -- This should return (String, String)
myFunc应在show签名完全多态的,所以它可以接受a和b,满足Show的不同类型。 这
我想使用自定义的限制,以帮助遏制组合爆炸: {-# LANGUAGE ConstraintKinds #-}
{-# LANGUAGE MultiParamTypeClasses #-}
class DifferentTypes a b
type DifferentTypes3 a b c = (DifferentTypes a b, DifferentTypes b c, Differe
当我有像在Haskell以下数据类型: data A ctx = A (forall a. ctx a => a -> a)
然后,我可以把那类型的给定类的工作价值这一数据类型的功能: > A (+3) :: A Num
A (+3) :: A Num :: A Num
但是,是否可以将具有多个约束的函数放入此数据类型?我试过这个: > :t ((+ 3) . succ)
((+ 3)