Bryn Keller <[EMAIL PROTECTED]> writes:

> Hi Max,
Hello Bryn,

> Thanks for pointing this out. It's odd that I don't see that anywhere
> in the docs at the HToolkit site:
> http://htoolkit.sourceforge.net/doc/hsql/Database.HSQL.html but GHC
> certainly believes it exists. However, this doesn't actually solve the
> problem. Substituting toSqlValue for show in printRow' gives the same
> compile error:
>
> Main.hs:22:18:
>     Ambiguous type variable `a' in the constraint:
>       `SqlBind a' arising from use of `getFieldValue' at Main.hs:22:18-30
>     Probable fix: add a type signature that fixes these type variable(s)
>
> So, like with (show (read s)), we still can't use the function until
> we've established a definite type for the value, not just a type
> class.
Yeah... 
Some more RTFSing shows that we have the 

getFieldValueType :: Statement -> String -> (SqlType, Bool)

which allows us to write

printRow stmt = do (id :: Int) <- getFieldValue stmt "ID"
                   let (codeType, _) = getFieldValueType stmt "Code"
                   codestr <- case codeType of
                                   SqlChar _ -> do (c :: String) <- 
getFieldValue stmt "Code"
                                                   return (toSqlValue c)
                                   SqlInteger -> do (i :: Int) <- getFieldValue 
stmt "Code"
                                                    return (toSqlValue i)
                                   -- etc for all SqlType data constructors
                   putStrLn (unwords [show id, codestr])

At least it compiles. But it's ugly :-( 

--
WBR,
Max Vasin.

_______________________________________________
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe

Reply via email to