gpt4 book ai didi

haskell - Haskell 中的任何类型?

转载 作者:行者123 更新时间:2023-12-01 06:54:47 25 4
gpt4 key购买 nike

我最近开始尝试通过阅读 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 .它接受一个函数和一个列表,如果任何列表条目为该特定函数返回真,则返回真。我也在 Python 和 JavaScript 中使用过它。

问题
  • 我不明白如何any :: Foldable t => (a -> Bool) -> t a -> Bool
    翻译成上面的。
  • (a -> Bool)是谓词。接受一个参数并返回真或假。
  • t a -> Bool Bool 是 any 的最终结果。根据我的理解t和a分别代表谓词和列表。为什么它们不以 -> 分隔
  • 如何从总体上理解类型签名以及如何深入挖掘以便我可以自己接近它们?
  • 最佳答案

    any :: Foldable t => (a -> Bool) -> t a -> Bool

    这里 Foldable t意味着, t是类型类 Foldable 的实例.
    Foldable是一个类型类,如果输入 t是类型类 Foldable 的实例我们从 t a 得知签名的一部分或来自类型类的定义 Foldable , 那 t实际上是一个类型构造函数。

    所以 t a是一种类型,因此 t a -> Bool是一个函数,映射类型为 t a 的值至 Bool .这个函数将是闭包,这将
    将谓词应用于 t a 类型值的每个“元素” , 直到找到一个,产生 True在谓词下或者它找不到这样的元素返回 TrueFalse在各自的情况下。 (实际的实现可能会有很大的不同。)

    例如 []是类型类 Foldable 的实例因此 t a可能是一些东西的 list 。在这种情况下,我们也可以写 [a]而不是 [] a .

    但是还有其他类型构造函数,它们可以是 Foldable 的实例。 ,例如某些种类的树。

    关于haskell - Haskell 中的任何类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46490606/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com