Hi I have met a piece of code that cannot be compiled whether I add or remove the NoMonomorphismRestriction flag (as of GHC 7.0.4, Haskell platform 2011.4.0.0).I have extracted a minimal example below: {-# LANGUAGE NoMonomorphismRestriction #-}
(f1, f2) =
let commond_definitions = undefined in
let f1 = id.show
f2 x = (< x)
in
(f1, f2) I needed this format because there are many shared definitions in common_definitions for f1 and f2, and I want to keep them local. If I compile them with NoMonomorphismRestriction, I get:
D:\work\test.hs:7:8:
Ambiguous type variable `a0' in the constraint:
(Show a0) arising from a use of `f1'
Possible cause: the monomorphism restriction applied to the following:
f1 :: a0 -> String (bound at D:\work\hsOcaml\test.hs:2:2)
Probable fix: give these definition(s) an explicit type signature
In the expression: f1
In the expression: (f1, f2)
In the expression:
let
f1 = id . show
f2 x = (< x)
in (f1, f2)D:\work\test.hs:7:12:
Ambiguous type variable `a1' in the constraint:
(Ord a1) arising from a use of `f2'
Possible cause: the monomorphism restriction applied to the following:
f2 :: a1 -> a1 -> Bool (bound at D:\work\hsOcaml\test.hs:2:6)
Probable fix: give these definition(s) an explicit type signature
In the expression: f2
In the expression: (f1, f2)
In the expression:
let
f1 = id . show
f2 x = (< x)
in (f1, f2)
Failed, modules loaded: none. If I comment out -- {-# LANGUAGE NoMonomorphismRestriction #-}
I get:
D:\work\hsOcaml\test.hs:4:17:
Ambiguous type variable `a0' in the constraint:
(Show a0) arising from a use of `show'
Possible cause: the monomorphism restriction applied to the following:
f1 :: a0 -> String (bound at D:\work\hsOcaml\test.hs:2:2)
Probable fix: give these definition(s) an explicit type signature
or use -XNoMonomorphismRestriction
In the second argument of `(.)', namely `show'
In the expression: id . show
In an equation for `f1': f1 = id . showD:\work\hsOcaml\test.hs:7:12:
Ambiguous type variable `a1' in the constraint:
(Ord a1) arising from a use of `f2'
Possible cause: the monomorphism restriction applied to the following:
f2 :: a1 -> a1 -> Bool (bound at D:\work\hsOcaml\test.hs:2:6)
Probable fix: give these definition(s) an explicit type signature
or use -XNoMonomorphismRestriction
In the expression: f2
In the expression: (f1, f2)
In the expression:
let
f1 = id . show
f2 x = (< x)
in (f1, f2)
Failed, modules loaded: none. Can anyone show me why this does not work and how to fix it (e.g. by adding type signature as the error message suggested)?I tried to add type signature by couldn't figure out the right way of doing it. Thanks in advance! Ting
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.haskell.org/pipermail/haskell-cafe/attachments/20120328/ac7cd74a/attachment.htm>