我相信我对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) 我偶然发现了很多练习,它们会给你一个功能,并要求你推断出每个练习的类型.
我有以下示例.请注意,这不是我需要完成的功课.我有这个具体例子的答案,并在下面提供.也许有人可以帮助我学习如何推理这种练习.
功能:
h1 f g x y = f (g x y) x
Run Code Online (Sandbox Code Playgroud)
假设的类型:
h1 :: (a -> b -> c) -> (b -> d -> a) -> b -> d -> c
Run Code Online (Sandbox Code Playgroud)
谢谢!
我加了27次演习在这里 没有解决方案.
其中一些有解决方案包括在这里.但是,可以使用GHCi命令知道类型:t
在Edward Kmett的演讲中,Lenses,Folds和Traversals,在幻灯片"The Power is the Dot"中,他展示的(.) . (.) . (.)是
(a -> b) -> (c -> d -> e -> a) -> c -> d -> e -> b
我可以通过在GHCI中显示它的类型来看到它.但我也想知道原因.我想了解的另一件事是为什么有在从参数中经常换着花样(.)来(.) . (.)和(.) . (.) . (.):
(.) :: (a -> b) -> (c -> a) -> c -> b
(.) . (.) :: (a -> b) -> (c -> d -> a) -> c -> d -> b
(.) . …Run Code Online (Sandbox Code Playgroud) haskell types type-inference combinators function-composition