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. ハスケル再帰型int2nat
- 5. ハスケル型同義語
- 6. ハスケル推論型エラー
- 7. ハスケルの外来型と非箱型型
- 8. ハスケル型クラスのあいまいな型
- 9. ハスケル:このデータ型のファンクタ?
- 10. ハスケル:誰でもalgebricデータ型
- 11. ハスケルの任意の型?
- 12. ハスケル独自のインスタンス型クラス
- 13. ハスケル型システムの問題
- 14. ハスケル再帰と型エラー
- 15. ハスケルの多型関数
- 16. ハスケル式の型takeWhile even
- 17. ハスケル型数学問題
- 18. ハスケルでの型比較
- 19. ハスケルの同型の `fmap`
- 20. ハスケル64ビット数値型
- 21. ハスケル:使用ユーザーdefiniedデータ型
- 22. ハスケル型クラスのインスタンス化
- 23. 型安全性に関するハスケル型と新型
- 24. ハスケル型安全な空間の使用
- 25. ハスケルのカスタム数学型とクラス
- 26. ハスケル型強制を無効にする
- 27. ハスケルの代数的データ型: "pseudo-extend"
- 28. ハスケルのデータ型エイリアスの名前付け
- 29. ハスケル型クラス - divと/?の違い
- 30. ハスケル型不一致Intと[Int]
'マップ-1 X 'は、(マップ)'として解析されます - (1×) '。しかし、そのタイプは本当にいいです。 – Vitus
それは地図から何かをマイナスしたいのですか? – whd
基本的に。これは、関数型( 'Num(t - >(a - > b) - > [a] - > [b])'にいくつか狂ったconstraitを入れようとしています。 – Vitus