4

ハスケルでは:

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

フレーゲでは:

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

この回答をどのように解釈すればよいですか? また、なぜ違いがあるのですか?

(実世界の frege git リポジトリに適用された実世界の haskell の例)

4

1 に答える 1

5

Stringは Frege には含まれていないため[Char]、裏で一定レベルの互換性を保証するためにいくつかの (おそらく中途半端な) 試みが行われています。

  1. 型クラスEmptyにより、空の値 ( null) のテストが可能になります (ただし、おそらく Monoid のサブクラスである必要があります)。
  2. 型クラスListLikeheadand tailandを提供します(++)
  3. Type クラスListSourceは、( operation を介して) リストとして表示できる型用ですtoList。現在、String、Maybe、および配列。リスト内包表記は だけでなく、ジェネレーターの右側の の[a]インスタンスも許可することに注意してください。ListSource

リストと文字列の両方が上記のクラスのインスタンスであり、このようにして特定の基本的な関数がリストと文字列の両方で動作します。Haskell と同様ですが、これらの関数の型は Frege ではもう少し一般的です。

null結論: 、(++)head、およびリスト内包表記のような単純な関数を使用する限りtail、Frege では文字列がリストではないことに気付かないかもしれません。

于 2013-09-30T09:30:10.520 に答える