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