私はGHCiで素早く1ライナーを書いていて、マップで合計を作ろうとしました。私は、mapが一般的な型[b]の出力を与えるのに対し、sumは特定の入力Num a => [a]を取るのに対し、失敗した理由を理解しました。しかし、マップ関数の出力がタイプNum b => [b]であると仮定して、このコードには何も問題はありません。Haskell:一般的なタイプの特定のタイプの関数を作成しますか?
私は規制型宣言がうまくいくかもしれない書き込みを考え(私が推測するが、それはGHCiの中でそれをやってからあなたを防ぐ)それはまだしませんでした:
myFunc :: Num b => (a -> b) -> [a] -> b
myFunc = sum . map
は私に次のエラーを与えた:
Couldn't match expected type `[[a] -> b]'
with actual type `[a] -> [b]'
Expected type: (a -> b) -> [[a] -> b]
Actual type: (a -> b) -> [a] -> [b]
In the second argument of `(.)', namely `map'
In the expression: sum . map
これを行う方法はありますか?たぶん私はちょうど何か明白な(ハスケルに新しい)行方不明です。
myFunc f = sumを試してください。マップf '。 '(。)'は単項関数を構成します。 –