あなたが新しい名前にバインドその後、単相性制限をオンにすると、これを行うことができます:あなたは、常に新しい変数を定義する必要性を空想しない場合は、この問題を回避
Prelude> :set -XMonomorphismRestriction
Prelude> let n = 42
Prelude> :t n
n :: Integer
Prelude> let p = (^)
Prelude> :t p
p :: Integer -> Integer -> Integer
Prelude> let e = (**)
Prelude> :t e
e :: Double -> Double -> Double
Prelude> let d = div
Prelude> :t d
d :: Integer -> Integer -> Integer
得ることができます
Prelude> :def monotype (\e -> return $ ":set -XMonomorphismRestriction\nlet defaulted = "++e++"\n:t defaulted")
(あなたが常に利用可能なコマンドを持っているあなたの.ghci
ファイルにそれを置きたい場合があります)、その後
Prelude> :monotype (^)
defaulted :: Integer -> Integer -> Integer
を使用して、もちろん
、単相性制限を有効にするの隠された世界的な副作用は非常に醜いですが、まあ...
タイプデフォルトルールの結果はどのように表示されますか? ':t 42 \' div \ '2'は' Integral a => a'を示し、let-bindingsなどの結果も同様です。 –
@ n.m。私は実際の結果について言っていました。 '2^100 \' div \ '2'は '633825300114114700748351602688'を出力します。この場合のデフォルトの型は' Integer'です。 'ghci'でこの定数の型が多型であると言われても、実際にはその固有値と、どの単形型が使われているのかを見たいと思います。 – Shersh
@ShershそれはちょうどGHCiです。 REPLは何かを表示しなければならないので、型(この場合は 'Integer')を選択します。 "本当の"コードでは、コンテキストが型を選ぶまでは多態的です。 –