2つの関数の型を指定する必要があります(コンパイラを使わずに:t)私はちょうど私が正しいステップを作るためにこれらの関数をどのように読み込むのかわかりません。私はそれがこのような質問のためにハスケル型dessignation
答えて
機能アプリケーション、または "空の空白演算子"は、任意の演算子シンボルよりも優先順位が高いため、最初の行はf x = map - (1 x)
と解釈されます。は型エラーです。
もう1つの例は見た目のかっこで示してありますが、(-1)
デュガールはnegate 1
です。これは、通常のルールからの例外です。(+1)
のような演算子セクションは(\x -> x + 1)
とdesugarなので、はタイプエラーになります。map
は、最初の引数として数字ではなく、関数を期待しているためです。
このチェックを入力することを可能にする機能のためのNum
インスタンスを提供することは技術的には可能であるので、私はそう言います。
それは私のためのタイプのチェックですが、結果は醜いです。 –
に解析する方法を少し混乱してい
f x = map -1 x
f x = map (-1) x
まあ、決定的な答えはHaskell Reportをチェックすることです。関連する構文はHaskell 98から変更されていません。
特に、「式」のセクションを確認してください。これは、式がどのように解析されるか、演算子の優先順位などについて説明する必要があります。
これらの関数は型を持たないため、型チェックはしません(あなたは型の厳密なクラス制約を取得します)。理由を理解するには、のタイプがNum n => n
であることを知っていなければなりません。また、-
の前に括弧を入れているかどうかを調べる必要があります。
次の関数は、あなたの関数の「正しい」バージョンです:
f x = map (subtract 1) x
私はと言う場合は、この機能の種類を把握することができるはずです。
subtract 1 :: Num n => n -> n
map :: (a -> b) -> [a] -> [b]
はよく、私は私の自己でそれをやった:P
(map) - (1 x)
(-)::Num a => a->a->->a
1::Num b=> b
x::e
map::(c->d)->[c]->[d]
map::a
a\(c->d)->[c]->[d]
(1 x)::a
1::e->a
f::(Num ((c->d)->[c]->[d]),Num (e->(c->d)->[c]->[d])) => e->(c->d)->[c]->[d]
- 1. ハスケル:型クラスは
- 2. ハスケル型チェック
- 3. ハスケル推論型エラー
- 4. ハスケル型同義語
- 5. ハスケルでの型比較
- 6. ハスケルの多型関数
- 7. ハスケル型システムの問題
- 8. ハスケル型クラスのインスタンス化
- 9. ハスケル:このデータ型のファンクタ?
- 10. ハスケル64ビット数値型
- 11. ハスケル型数学問題
- 12. ハスケル再帰と型エラー
- 13. 型安全性に関するハスケル型と新型
- 14. ハスケル型クラスと複数のファイル
- 15. ハスケル型安全な空間の使用
- 16. ハスケルのカスタム数学型とクラス
- 17. ハスケルでのデータ型の使用
- 18. ハスケルのデータ型エイリアスの名前付け
- 19. ハスケルの代数的データ型: "pseudo-extend"
- 20. ハスケル:型を2つの型のインスタンスにするには?
- 21. ハスケル:型式(型格)を定義できます
- 22. ハスケル型クラスではどのように型を使うべきですか?
- 23. ハスケル:
- 24. ハスケル
- 25. ハスケル
- 26. ハスケル
- 27. ハスケル:
- 28. ハスケル
- 29. ハスケル
- 30. ハスケル
'マップ-1 X 'は、(マップ)'として解析されます - (1×) '。しかし、そのタイプは本当にいいです。 – Vitus
それは地図から何かをマイナスしたいのですか? – whd
基本的に。これは、関数型( 'Num(t - >(a - > b) - > [a] - > [b])'にいくつか狂ったconstraitを入れようとしています。 – Vitus