gpt4 book ai didi

haskell - 将 compose 应用于 fmap

转载 作者:行者123 更新时间:2023-12-02 16:48:16 25 4
gpt4 key购买 nike

几个星期以来,我一直试图弄清楚 Haskell 编译器如何将 (.) 应用于 fmap。

我的意思是。

:t (.)
(.) :: (b -> c) -> (a -> b) -> a -> c

:t fmap
fmap :: Functor f => (a -> b) -> f a -> f b

:t (.) fmap
(.) fmap :: Functor f => (a -> a1 -> b) -> a -> f a1 -> f b

编译器如何得出 (.)fmap 的类型?

我实际上想在这里问这个问题,但是当我解释我所尝试的内容时,所有这些都集中在一起了。所以现在我也将发布答案。

最佳答案

为了得到这个,我使用了 fmap

fmap :: Functor f => (a -> b) -> f a -> f b
fmap :: Functor f => (a -> b) -> (f a -> f b)

如果

:t (.)
(.) :: (b -> c) -> (a -> b) -> a -> c

然后

(.) 函数开头的

(b -> c) 可以替换为

((a -> b) -> (f a -> f b))

所以我有

((a1 -> b) -> (f a1 -> f b)) -> (a -> (a1 -> b)) -> a -> (f a1 -> f b)

由于 (.) 已应用于 fmap,我们可以消除 ((a1 -> b) -> (f a1 -> f b)),剩下

(a -> (a1 -> b)) -> a -> (f a1 -> f b)

然后为了更加干净,我们可以消除多余的括号。

IRC Beginner-haskell channel 的 Glguy 和 Hamme 都提醒我 (->) 是右结合的

例如(a -> b -> c -> d) = (a -> (b -> (c -> d)))

所以我们消除了多余的括号。

(a -> a1 -> b) -> a -> f a1 -> f b

:t (.) fmap
(.) fmap :: Functor f => (a -> a1 -> b) -> a -> f a1 -> f b

关于haskell - 将 compose 应用于 fmap,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40055333/

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