在哈斯克尔:
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 中的列表。