我在做20个中级haskell练习。练习9是:
class Misty m where
banana :: (a -> m b) -> m a -> m b
unicorn :: a -> m a提供给这里的解决方案是
instance Misty ((->) t) where
banana x y z = (x $ y z) z
unicorn f _ = f如果我在香蕉的类型签名中用((->) t)替换m,我将得到
(a -> (t->b)) -> (t->a) -> (t->b)它似乎是((->) t)的一个绑定函数。那么,为什么香蕉需要三个论点呢?为什么答案是(x $y) z?
谢谢你的帮助。:)
发布于 2017-10-22 12:45:12
关键的见解是签名
(a -> (t->b)) -> (t->a) -> (t->b)相当于:
(a -> (t->b)) -> (t->a) -> t -> b这意味着绑定banana x y z绑定以下内容:
x :: a -> (t->b)
y :: t -> a
z :: t因此:
y z :: a
x $ y z :: t -> b
(x $ y z) z :: bhttps://stackoverflow.com/questions/46873964
复制相似问题