:type null null :: [a] -> Bool 在弗雷格中: frege> :type null Empty α => α β -> Bool 我如-6ren">
gpt4 book ai didi

haskell - 为什么 Frege 中的 ":type null"与 Haskell 中的不同?

转载 作者:行者123 更新时间:2023-12-02 18:26:26 26 4
gpt4 key购买 nike

在 haskell 中:

ghci> :type null
null :: [a] -> Bool

在弗雷格中:

frege> :type null
Empty α => α β -> Bool

我如何解释这个答案以及为什么会有差异?

(来自现实世界的 Haskell 的示例,改编为现实世界的 frege git 存储库)

最佳答案

因为 Frege 中的 String 不是 [Char],所以已经进行了一些(也许是半心半意的)尝试来保证幕后一定程度的兼容性:

  1. 类型类 Empty 可以测试空值 (null)(不过,可能应该是 Monoid 的子类)
  2. 类型类 ListLike 为您提供 headtail 以及 (++)
  3. 类型类ListSource适用于可作为列表查看的类型(通过操作toList)。目前,有 String、Maybe 和数组。请注意,列表理解不仅允许 [a],还允许在生成器右侧使用 ListSource 实例。

列表和字符串都是上述类的实例,这样某些基本函数就可以在列表和字符串上工作,就像在 Haskell 中一样,尽管这些函数的类型在 Frege 中更为通用。

底线:只要使用简单的函数,例如 null(++)headtail 和列表理解,您甚至可能没有注意到弗雷格中没有列出字符串。

关于haskell - 为什么 Frege 中的 ":type null"与 Haskell 中的不同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19085908/

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