为什么":type null"在弗雷格与Haskell不同?

Die*_*erk 4 haskell frege

在Haskell:

ghci> :type null
null :: [a] -> Bool
Run Code Online (Sandbox Code Playgroud)

在弗雷格:

frege> :type null
Empty ? => ? ? -> Bool
Run Code Online (Sandbox Code Playgroud)

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

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

Ing*_*ngo 5

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

  1. Type类Empty可以测试空值(null)(尽管可能应该是Monoid的子类)
  2. 类型类ListLike给你headtail(++)
  3. 类型类ListSource用于可以被视为列表的类型(通过操作toList).目前,String,Maybe和数组.请注意,列表推导不仅允许[a],而且允许ListSource生成器右侧的实例.

列表和字符串都是上述类的实例,这样某些基本函数对列表和字符串都有效,就像在Haskell中一样,尽管这些函数的类型在Frege中更为通用.

底线:只要你使用简单的功能,如null,(++),head,tail和列表理解,你甚至可能不会注意到字符串不是弗雷格名单.