Implicit Parameter Bug?

Ashley Yakeley
Sun, 3 Feb 2002 18:22:56 -0800

What's wrong with this?

    f :: ((?param :: a) => b) -> a -> b
    f foo a = foo with ?param=a

    g :: (?param :: a) => a
    g = ?param

    h :: a -> a
    h = f g

'ghci -fglasgow-exts' (5.02) gives this error:

    Could not deduce (?param :: a) from the context ()
    Probable fix:
        Add (?param :: a) to the type signature(s) for h
    arising from use of `g' at Implicit.hs:10
    In the first argument of `f', namely `g'
    In the definition of `h': f g

'hugs -98' (Feb 2000) gets as far as this:

Reading file "/usr/share/hugs98/lib/Prelude.hs":
Reading file "Implicit.hs":
Type checking      

...and spins there.

There's a workaround for ghci, but it doesn't help hugs:

    h :: a -> a
    h = f (g with ?param = ?param)

This is very odd, as surely the type of (g with ?param = ?param) is the 
same as the type of g?

Ashley Yakeley, Seattle WA