問題タブ [monomorphism-restriction]

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 投票する
1 に答える
298 参照

haskell - sq をポイントフリーに変更すると型が変わるのはなぜですか

重複の可能性:
この ghci セッションの型で何が起こっているのですか?

Haskell を少し練習してポイントフリーについて学ぶために、数を 2 乗する関数をいじっていました。

だから私は定義することから始めました

そのため、sq を dup に関して書き換えることができました (今のところ、dup ポイントを無料にすることを心配する必要はありません)。

そしてsqのタイプをチェックすると、私が期待しているものがわかります

だから私はxを削除して取得します

私は何が欠けていますか?

0 投票する
1 に答える
728 参照

haskell - 単相制限について説明してください。

私は99のhaskell問題をやり始めました、そして私は問題7にあり、私のユニットテストは爆発していました。

どうやら、それはこれによるものです:http: //www.haskell.org/haskellwiki/Monomorphism_restriction

ちょっと混乱しているので、これを正しく理解していることを確認したかっただけです。

状況1:funcaは、型defなしまたは非厳密型defで定義され、その後1回使用されると、コンパイラーはコンパイル時に型を推測するのに問題はありません。

状況2:同じ関数aがプログラムで何度も使用されている場合、コンパイラーは、指定された引数の関数を再計算しない限り、型が何であるかを100%確信することはできません。

a 計算の損失を回避するために、ghcは、正しく機能するために厳密な型defが必要であるとプログラマーに不平を言います。

私の状況でassertEqualは、タイプdefは

が定義されたときにエラーが発生しました。これは、(ShowとEq)test3の戻りに2つの可能なタイプがあり、testcase3続行する方法がわからないと解釈したためです。

それは正しいように聞こえますか、それとも私は完全にオフですか?

problem7.hs:

最初の状況:testcase3 = flatten (List [])

2番目の状況:testcase3 = flatten (List []) :: Eq a => [a]

0 投票する
1 に答える
3538 参照

haskell - HaskellはIntと実数を掛けます

私は持っています

そして私はしたい

これを機能させるには、どのタイプの署名と変換関数を実行する必要がありますか?valを任意の種類のNumに一般化する機能が必要な場合は、その上で何をする必要がありますか?

これ:

このコンパイラの警告が表示されます:

私はそれが私が最初に尋ねたものではないことを知っています、私は私のコードをサニタイズするときにいくつかの間違いをしました。

係数のタイプがあります:

結果のエラー:

0 投票する
1 に答える
107 参照

haskell - その型の具体性に基づいて再構築された遅延リスト?

Haskell で単純な (そして真面目ではない) 素数ジェネレーターを書きました。素数を生成し、数値の素数を判断するための相互再帰的な定義を使用します。

を参照するたびに、既に生成された素数のサブリストを再構築しているように見えることに気付きましたprimes

しかし、次のような具体的な整数型を使用するように型注釈を変更すると、

各素数は 1 回だけ生成されます。

私には好奇心が強いようです。これが起こっている特定の理由はありますか?

0 投票する
0 に答える
123 参照

haskell - Haskell のポイントフリー関数

このポイントフリーをどのように定義しますか?

これは期待どおりに機能します。最も論理的なのは、次のようにドロップするだけのmようです。

ghciで定義するように動作しますが、それを呼び出すとargmax [1,3,4,5,6,1]私に与えられます

私はそれがタイプに関係していると思います:

ポイントバージョンの場合:

ポイントフリー版の場合:

これは ghci の不気味さですか、それとも何か間違ったことをしていますか?

0 投票する
1 に答える
527 参照

haskell - :ポリモーフィック値のスプリント?

この場合、なぜ:sprint報告するのか疑問に思っています。xs = _

しかし、この場合ではありません:

注: で実行ghciしてい-XNoMonomorphismRestrictionます。xsの型が最初のケースでは多形的であるが、2番目のケースではそうではないという事実と関係がありますか? 内部で何が起こっているのか知りたいです。

0 投票する
1 に答える
121 参照

haskell - 奇妙な関数型

Haskell の型に関する初心者向けの質問があります。次のような関数があります。

f0 xs = f 0 xsxs を明示的に使用せずに関数を定義するにはどうすればよいですか? 取ってるだけ

動作しません...

ghci は次のような型を示してくれます:
f :: Ord a => Int -> [a] -> a
f0 :: [()] -> ()
しかし、":tf 0" はf 0 :: Ord a => [a] -> a.

何故ですか?f0 でこの型を取得するのはなぜですか? 「f0」の型と「f 0」の型に違いがあるのはなぜですか?

提案をお寄せいただきありがとうございます

0 投票する
1 に答える
323 参照

haskell - Transducers in Haskell and the monomorphism restriction

I implemented transducers in Haskell as follows:

Now I want to define a generic map function. Hence I load the above code into GHCi:

So I can't define map = reduce . mapping. However, I can define map f = reduce (mapping f).

I believe that this problem is caused by the monomorphism restriction. I would really like to write map = reduce . mapping instead of map f = reduce (mapping f). Hence, I have two questions:

  1. What's causing this problem? Is it indeed the monomorphism restriction?
  2. How do I fix this problem?