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