我刚读过“了解你是一个哈克尔,喜欢我所看到的,所以开始玩这种语言。我在网上发现了一些我正在努力进行类型检查的练习。
我的问题是我不明白( - >)在类型签名Misty(( - >)t下面是什么。
class Misty m where
banana :: (a -> m b) -> m a -> m b
unicorn :: a -> m a
--- what does this mean?
instance Misty ((->) t) where
banana = error "todo"
unicorn = error "todo"
谢谢!
答案 0 :(得分:4)
((->) t)
是一个参数类型为t
的函数,例如(->) r
的仿函数实例如下所示:
instance Functor ((->) r) where
fmap = (.)
由于fmap
的类型是
Functor f => (a -> b) -> f a -> f b
,(.)
的类型是
(a -> b) -> (r -> a) -> (r -> c)
您可以看到f
是一个参数类型为r
的函数。
在Misty
课程中,这意味着banana
和unicorn
的类型为:
banana :: (a -> (t -> b)) -> (t -> a) -> (t -> b)
unicorn :: (a -> (t -> a))
答案 1 :(得分:3)
任何类型(a -> b)
都可以重写为(->) a b
。
(->) a
只是部分申请!
因此,您实际上要将函数((->) a)
作为Misty
的实例。