gpt4 book ai didi

haskell - 仿函数实例声明中的箭头运算符?

转载 作者:行者123 更新时间:2023-12-02 14:18:05 26 4
gpt4 key购买 nike

我正在浏览these Haskell“中级”练习,我做了以下实例:

class Fluffy f where
furry :: (a -> b) -> f a -> f b

instance Fluffy [] where
furry f [] = []

instance Fluffy Maybe where
furry f (Just e) = Just (f e)
furry f (Nothing) = Nothing

然而,第三个问题语法却难倒了我:

instance Fluffy ((->) t) where
...

我已经阅读了箭头运算符,还阅读了 this 的答案它解释了 (->) 在 Monad 实例中的作用。但是我不太明白 (->) 在仿函数上下文中如何工作?

最佳答案

我们有:

class Fluffy f where
furry :: (a -> b) -> f a -> f b

我们想要定义:

instance Fluffy ((->) t) where
furry = ...

这意味着在上面的实例中 furry 应该具有类型 (a -> b) -> f a -> f b 其中 f((->) t),或者换句话说:

furry :: (a -> b) -> ((->) t) a -> ((->) t) b

正如((+) 2) 32 + 3相同,((->) X) Y是与 X -> Y 相同(它是柯里化(Currying)运算符应用程序,甚至可以在类型级别工作):

furry :: (a -> b) -> (t -> a) -> (t -> b)

我们可以将上面的签名理解为“给定一个从 ab 的函数以及从 t 的函数>a,返回一个从tb的函数”。

现在您只需实现它即可。 :-)

关于haskell - 仿函数实例声明中的箭头运算符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42054569/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com