为什么弗雷格":type null"与哈斯克尔不同?



In Haskell :

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

在弗雷格:

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

我如何解释这个答案,为什么会有区别?

(来自现实世界的Haskell的例子,改编在现实世界的Frege Git Repo中(

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

  1. 类型类 Empty 使得空值 ( null ( 的测试成为可能(虽然应该是 Monoid 的一个子类(
  2. 类型类 ListLike为您提供headtail(++)
  3. 类型类 ListSource 适用于可作为列表查看的类型(通过操作 toList (。目前,字符串,也许和数组。注意,列表推导不仅允许[a],而且在生成器的右侧允许ListSource实例。
列表和字符串

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

底线:只要你使用简单的函数,如null(++)headtail和列表理解,你甚至可能不会注意到字符串在 Frege 中不是列表。

最新更新