4

在哈斯克尔:

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

在弗雷格:

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

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

(来自真实世界的haskell的例子,改编自真实世界的frege git repo)

4

1 回答 1

5

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

  1. 类型类Empty使得对空值 ( null) 的测试成为可能(不过应该是 Monoid 的子类)
  2. 类型类ListLike给你headtail(++)
  3. 类型类ListSource用于可以被视为列表的类型(通过 operation toList)。目前,String、Maybe 和数组。请注意,列表推导不仅允许,而且在生成器右侧的[a]实例。ListSource

列表和字符串都是上述类的实例,因此某些基本函数确实适用于列表和字符串,就像在 Haskell 中一样,尽管这些函数的类型在 Frege 中更通用一些。

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

于 2013-09-30T09:30:10.520 回答