在哈斯克尔:
ghci> :type null
null :: [a] -> Bool
在弗雷格:
frege> :type null
Empty α => α β -> Bool
我如何解释这个答案,为什么会有区别?
(来自真实世界的haskell的例子,改编自真实世界的frege git repo)
因为String不在[Char]Frege 中,所以已经进行了一些(可能是半心半意的)尝试来保证幕后的一定程度的兼容性:
Empty使得对空值 ( null) 的测试成为可能(不过应该是 Monoid 的子类)ListLike给你head和tail(++)ListSource用于可以被视为列表的类型(通过 operation toList)。目前,String、Maybe 和数组。请注意,列表推导不仅允许,而且在生成器右侧的[a]实例。ListSource列表和字符串都是上述类的实例,因此某些基本函数确实适用于列表和字符串,就像在 Haskell 中一样,尽管这些函数的类型在 Frege 中更通用一些。
底线:只要您使用简单的函数,如null、(++)、和列表推导式head,tail您甚至可能不会注意到字符串不是 Frege 中的列表。