【发布时间】:2017-09-29 14:09:06
【问题描述】:
我最近开始尝试通过阅读 LearnYouAHaskell 和互联网上的随机文章来学习 Haskell。
我很难理解更复杂的函数类型。
一些我理解的例子。
> :t map
map :: (a -> b) -> [a] -> [b]
它接受一个函数(接受 a 并给出 b,即 a 和 b 可以是不同的类型)和一个 a 的列表并返回一个 b 的列表。
> :t fst
fst :: (a, b) -> a
接受 2 个元素的元组(允许不同的类型)并返回第一个。
> :t any
在更高的层次上,我理解any。它接受一个函数和一个列表,如果任何列表条目对该特定函数返回 true,则返回 true。我也在 Python 和 JavaScript 中使用过它。
问题
-
我不明白
any :: Foldable t => (a -> Bool) -> t a -> Bool是如何翻译成上述内容的。-
(a -> Bool)是谓词。接受一个参数并返回真或假。 -
t a -> BoolBool 是 any 的最终结果。根据我的理解 t 和 a 代表谓词和列表。为什么它们不被->分开?
-
如何从总体上理解类型签名以及如何深入挖掘以便我可以自己接近它们?
【问题讨论】:
标签: haskell types type-signature