为什么":输入null"弗雷格与哈斯克尔有什么不同?

时间:2013-09-30 03:10:27

标签: haskell frege

在Haskell:

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

在弗雷格:

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

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

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

1 个答案:

答案 0 :(得分:5)

因为弗雷格String不是[Char],所以已经做了一些(可能是半心半意的)尝试以保证幕后的一定程度的兼容性:

  1. 类型类Empty可以测试空值(null)(尽管可能应该是Monoid的子类)
  2. 类型类ListLike为您提供headtail以及(++)
  3. 类型类ListSource适用于可以列为列表的类型(通过操作toList)。目前,String,Maybe和数组。请注意,列表推导不仅允许[a],还允许生成器右侧的ListSource实例。
  4. 列表和字符串都是上述类的实例,这样某些基本函数对列表和字符串都有效,就像在Haskell中一样,尽管这些函数的类型在Frege中更为通用。

    底线:只要您使用null(++)headtail和列表理解等简单函数,您甚至可能不会注意到字符串不是列表在弗雷格。