問題タブ [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.

0 投票する
2 に答える
124 参照

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)制約について言及する必要があると思います。

  • 暗黙のパラメーターが関数に渡されないことをその単型性がどのように意味するのでしょうか?