1
このコードは、教科書の練習用です。GHCiで印刷関連のデフォルト警告が表示されないようにする方法
私は
minmax :: (Ord a, Show a) => [a] -> Maybe (a, a)
minmax [] = Nothing
minmax [x] = Just (x, x)
minmax (x:xs) = Just (if x < xs_min then x else xs_min
, if x > xs_max then x else xs_max
) where Just (xs_min, xs_max) = minmax xs
を定義した場合は...その後、ghci
に私はこれらのような警告が表示されます:
*...> minmax [3, 1, 4, 1, 5, 9, 2, 6]
<interactive>:83:1: Warning:
Defaulting the following constraint(s) to type ‘Integer’
(Num a0) arising from a use of ‘it’ at <interactive>:83:1-31
(Ord a0) arising from a use of ‘it’ at <interactive>:83:1-31
(Show a0) arising from a use of ‘print’ at <interactive>:83:1-31
In the first argument of ‘print’, namely ‘it’
In a stmt of an interactive GHCi command: print it
Just (1,9)
私はminmax
の型シグネチャのコンテキストでShow a
を持つことだろうと予想していましたそのような警告を排除しました。なぜこれで十分ではないのか分かりません。
このような警告を排除するために何をすべきですか? (私はminmax
によって返された値のために明示的に新しいタイプを定義する必要はありませんソリューションで特に興味)
Re: "これは十分ではありません": 'Show a'は、コンパイラーが印刷方法を知っているタイプを選択することを要求しますが、多くのタイプがこの契約を満たします。通常、可能なタイプを多く持つことは問題ではありません。実際にあなたのコードを実行するには、単一の型とそれに関連する 'Show'インスタンスを選択する必要がありますので、' show'のどの実装を使用するか知っています。それは多くの選択肢を持つかもしれないと感じるので、それはあなたがあなたのために作ったものとは異なる選択をしたかったかもしれないとあなたに警告します。 –