我正在阅读 LYAH chapter关于应用仿函数,我似乎不理解以下示例:
ghci> :t fmap (++) (Just "hey")
fmap (++) (Just "hey") :: Maybe ([Char] -> [Char])
但是当我看到这个时:
ghci> :t (++)
(++) :: [a] -> [a] -> [a]
ghci> :t fmap
fmap :: Functor f => (a -> b) -> f a -> f b
我确实理解 (*3) 或 (++"this") 等内容如何适合 (a -> b) 类型,但我就是看不到 [a] -> [a] -> [a] 如何适合 (a -> b)?
最佳答案
关键是 ->
关联到右侧,因此像 a -> b -> c
这样的类型实际上是 a -> (b -> c)
。因此,通过设置 c
~ [a,
和 [a] -> [a] -> [a]
适合 c -> d
]d
~ [a] -> [a]
。您可以将函数 [a] -> [a] -> [a]
视为返回 [a]
类型结果的 2 个参数的函数,或者具有 1 个参数的函数,返回 [a] -> [a]
类型的结果。
关于Haskell:了解部分应用程序吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12109867/