无法理解haskell类型签名“实例Misty(( - >)t”

时间:2014-06-21 20:32:10

标签: haskell types

我刚读过“了解你是一个哈克尔,喜欢我所看到的,所以开始玩这种语言。我在网上发现了一些我正在努力进行类型检查的练习。

我的问题是我不明白( - >)在类型签名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"

谢谢!

2 个答案:

答案 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课程中,这意味着bananaunicorn的类型为:

banana :: (a -> (t -> b)) -> (t -> a) -> (t -> b)
unicorn :: (a -> (t -> a))

答案 1 :(得分:3)

任何类型(a -> b)都可以重写为(->) a b

(->) a只是部分申请!

因此,您实际上要将函数((->) a)作为Misty的实例。