
Indeed, with the monomorphism restriction disabled it works without issues. is this by design/expected though? Morally I feel it is already monomorph, it's just missing an argument which needs to be provided. Would there be interest in fixing this in GHC? On 3/23/22 15:56, J. Reinders wrote:
It’s due to the monomorphism restriction [1]. If you give `baz` an argument it does infer the type correctly:
``` foo :: Int foo = bar where bar = withX 42 (baz ()) baz () = somethingThanNeedsX ```
Or you can disable the monomorphism restriction:
``` {-# LANGUAGE NoMonomorphismRestriction #-} ```
[1] https://wiki.haskell.org/Monomorphism_restriction
On 23 Mar 2022, at 15:48, rowan goemans
wrote: Hello everyone,
I wonder why the following taken from an stackoverflow answer doesn't work: https://stackoverflow.com/questions/71184922/is-it-possible-to-infer-a-type-.... Code of the answer posted here verbatim:
``` {-# LANGUAGE ImplicitParams #-} {-# LANGUAGE RankNTypes #-}
module Temp where
withX :: Int -> ((?x :: Int) => r) -> r withX x r = let ?x = x in r
somethingThanNeedsX :: (?x :: Int) => Int somethingThanNeedsX = ?x + 2
foo :: Int foo = bar where bar = withX 42 baz
baz = somethingThanNeedsX ```
This won't compile with the error message:
``` Orig.hs:19:11: error: • Unbound implicit parameter (?x::Int) arising from a use of ‘somethingThanNeedsX’ • In the expression: somethingThanNeedsX In an equation for ‘baz’: baz = somethingThanNeedsX In an equation for ‘foo’: foo = bar where bar = withX 42 baz baz = somethingThanNeedsX | 19 | baz = somethingThanNeedsX ```
If you give `baz` a type signature which includes the implicit param it compiles. But I think this is a bug. GHC should not require a type signature here. I tried searching for a GHC ticket but I couldn't find one. But that might also be down to me not using the right query.
Anyway my question is, is this expected behavior? This really makes implicit params less ergonomic.
Best regards,
Rowan Goemans
_______________________________________________ Haskell-Cafe mailing list To (un)subscribe, modify options or view archives go to: http://mail.haskell.org/cgi-bin/mailman/listinfo/haskell-cafe Only members subscribed via the mailman list are allowed to post.