ハスケルでは:
ghci> :type null
null :: [a] -> Bool
フレーゲでは:
frege> :type null
Empty α => α β -> Bool
この回答をどのように解釈すればよいですか? また、なぜ違いがあるのですか?
(実世界の frege git リポジトリに適用された実世界の haskell の例)
String
は Frege には含まれていないため[Char]
、裏で一定レベルの互換性を保証するためにいくつかの (おそらく中途半端な) 試みが行われています。
Empty
により、空の値 ( null
) のテストが可能になります (ただし、おそらく Monoid のサブクラスである必要があります)。ListLike
はhead
and tail
andを提供します(++)
ListSource
は、( operation を介して) リストとして表示できる型用ですtoList
。現在、String、Maybe、および配列。リスト内包表記は だけでなく、ジェネレーターの右側の の[a]
インスタンスも許可することに注意してください。ListSource
リストと文字列の両方が上記のクラスのインスタンスであり、このようにして特定の基本的な関数がリストと文字列の両方で動作します。Haskell と同様ですが、これらの関数の型は Frege ではもう少し一般的です。
null
結論: 、(++)
、head
、およびリスト内包表記のような単純な関数を使用する限りtail
、Frege では文字列がリストではないことに気付かないかもしれません。