我相信我对fmap . fmapFunctors 了解,但是在功能方面它已经让我头疼了好几个月了.
我已经看到你可以只应用(.)to 的定义(.) . (.),但我忘了怎么做.
当我自己尝试时,它总是错误的:
(.) f g = \x -> f (g x)
(.) (.) (.) = \x -> (.) ((.) x)
\x f -> (.) ((.) x) f
\x f y -> (((.)(f y)) x)
\x f y g-> (((.)(f y) g) x)
\x f y g-> ((f (g y)) x)
\x f y g-> ((f (g y)) x):: t2 -> (t1 -> t2 -> t) -> t3 …Run Code Online (Sandbox Code Playgroud) 我是一个刚开始学习Haskell的菜鸟,所以如果我问愚蠢的问题,请耐心等待.
最近我遇到了SO中的问题,演示了如何推导出函数和表达式的类型和实现(问题如
&
Haskell函数组成,(.)(.)的类型以及它是如何呈现的 )
我发现答案非常鼓舞人心
然后,我尝试为自己做一些练习,以确保我知道如何应用这些技巧.
然后我自己想出这个表达:(<*>)(<*>)我不知道如何解决.
在GHCi中,它给出了类型签名:
(<*>)(<*>) :: Applicative f => (f (a -> b) -> f a) -> f (a -> b) -> f b
Run Code Online (Sandbox Code Playgroud)
但我的问题是我怎么能从这开始
(<*>) :: Applicative f => f (a -> b) -> f a -> f b
Run Code Online (Sandbox Code Playgroud)
并导出GHCi给出的类型签名?
而且,基于类型签名,如何实现(<*>)(<*>) = ??呢?
我陷入困境,无法通过重新安排术语等技术来解决这个问题.我甚至都不知道从哪里开始.
有人会帮我一个忙吗?
非常感谢
注意**:表达式(<*>)(<*>)确实没有特殊意义,这只是我随机为自己做的一个练习
我是Haskell的初学者,我遇到了函数(.)(.),我用它:t来获取GHCi中的类型:
:t (.)(.)
(.)(.) :: (a -> b -> c) -> a -> (a1 -> b) -> a1 -> c
Run Code Online (Sandbox Code Playgroud)
如何理解(.)(.) :: (a -> b -> c) -> a -> (a1 -> b) -> a1 -> c这里的类型?我很迷茫.