問題タブ [monomorphism]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
haskell - Haskell Implicit パラメーターと多相再帰
GHC User Guide の「 Implicit parameters and polymorphic recursion」の章について質問があります。
コードは
章は言う
前者の場合、len_acc1 はそれ自体の右辺が単相であるため、暗黙のパラメーター ?acc は再帰呼び出しに渡されません。後者の場合、len_acc2 には型シグネチャがあるため、暗黙のパラメーターとして ?acc を取るポリモーフィック バージョンに対して再帰呼び出しが行われます。
質問は
この場合、「それ自体の右側で単形性」は型を意味し
len_acc1 :: (?acc :: Int) => [a] -> p
ますか? なぜghciは言うのlen_acc1 :: (?acc::Int) => [a] -> Int
ですか?なぜ最初の関数は単相的で、2 番目の関数はそうではないのですか? 私の理解が正しかったとしたら、その逆です。
または、型が であることを意味しているのかもしれませんが
len_acc1 :: [a] -> Int
、各ケースは?acc
暗黙的な値を参照しているため、型は(?acc :: Int)
制約について言及する必要があると思います。暗黙のパラメーターが関数に渡されないことをその単型性がどのように意味するのでしょうか?