exists
Haskell 型システムに関連するキーワードを理解するのに苦労しています。私の知る限り、Haskell にはデフォルトでそのようなキーワードはありませんが、
- これらのような宣言で、それらを追加する拡張機能があります
data Accum a = exists s. MkAccum s (a -> s -> s) (s -> a)
- 私はそれらについての論文を見たことがあります.(私の記憶が正しければ)
exists
型システムにはキーワードは不要であると述べられています.forall
しかし、私には意味さえ理解できませんexists
。
私が言うときforall a . a -> Int
、それは(私の理解では、間違っていると思います)「すべての(タイプ)a
に対して、タイプの関数がある」ことを意味しますa -> Int
:
myF1 :: forall a . a -> Int
myF1 _ = 123
-- okay, that function (`a -> Int`) does exist for any `a`
-- because we have just defined it
私が言うときexists a . a -> Int
、それはどういう意味ですか?a
「型の関数がある型が少なくとも 1 つあるa -> Int
」? なぜそのような声明を書くのでしょうか?何の目的?セマンティクス?コンパイラの動作?
myF2 :: exists a . a -> Int
myF2 _ = 123
-- okay, there is at least one type `a` for which there is such function
-- because, in fact, we have just defined it for any type
-- and there is at least one type...
-- so these two lines are equivalent to the two lines above
コンパイルできる実際のコードを意図したものではないことに注意してください。これらの量指定子について私が想像している例にすぎません。
PS 私は Haskell の完全な初心者ではありませんが (おそらく 2 年生のように)、これらのことに関する数学の基礎が欠けています。