Haskell:了解部分应用程序吗?

标签 haskell currying

我正在阅读 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/

相关文章:

haskell - 解决 GHC 'I found a duplicate definition for symbol ...'

swift - 来自不同类的引用方法作为柯里化(Currying)函数

c - 部分应用 C 中的函数

javascript - 闭包和柯里化(Currying)中的引用如何在 js 中工作?

javascript - 使用 _.curry 的函数无法按预期工作

haskell - 为什么>>=比<=<更常被讨论?

haskell -斯科蒂 : Set custom headers (x-frame-options)

Haskell var <- get 是什么意思?

parsing - 如何使用megaparsec报告多个错误?

javascript - 这个函数实际上是做什么的?