doubleや、乗算と加算をサポートする他の種類の数値を操作して、結果としてdoubleを生成する関数を作成したいと思います。もちろん、(*)のタイプはt-> t-> tであるため、以下はコンパイルされません。したがって、異なるタイプを混在させることはできません。
f :: (Num a) => Double -> a -> a -> Double
f x a b = a*x + b
私が欲しいのは、次のようなものを書く能力です。
f :: ...
f x a b = ... -- equivalent to a*x + b
f 1.0 (2 :: Int) (3 :: Int) -- returns 5.0
f 1.0 (2 :: Word32) (3 :: Word32) -- returns 5.0
f 1.0 (2 :: Float) (3 :: Float) -- returns 5.0
それを機能させるにはどうすればよいですか?それとも私は根本的に間違っていて、これを行うべきではありませんか?とても不思議ですが、インターネット上でこれについて何も見つかりませんでした。