Implicit parameters:

Keean Schupke k.schupke at imperial.ac.uk
Wed Jan 19 09:42:05 EST 2005


Question regarding implicit parameters... The GHC manual says:

"Dynamic binding constraints behave just like other type class 
constraints in that they are automatically propagated."

But the following code produces an error:

---------------------------------------------------------------------------------------------------------

main = do
   var <- newIORef (0::Int)
   let ?global_counter = var in f
                                                                                                                                        

f = do
   a <- get_unique
   putStr (showInt a "\n")
   b <- get_unique
   putStr (showInt b "\n")
   c <- get_unique
   putStr (showInt c "\n")
                                                                                                                                        

get_unique :: (?global_counter :: IORef Int) => IO Int
get_unique = readIORef ?global_counter

----------------------------------------------------------------------------------------------------------

If "(?global_counter :: IORef Int)" were a class constraint the type 
signature
for 'f' could be derived automatically... but we get:

    Unbound implicit parameter (?global_counter::IORef a)
    arising from use of `get_unique' at Test.hs:17:13-22

Is this a bug? Is there some reason why this is not possible? (and if it 
is not possible
shouldn't the documentation be changed to reflect this)...

    Keean.



More information about the Glasgow-haskell-users mailing list