[Haskell-cafe] Re: Type classes and definite types

Bryn Keller xoltar at xoltar.org
Fri May 6 12:43:05 EDT 2005


Max Vasin wrote:

>Bryn Keller <xoltar at xoltar.org> 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 :-( 
>  
>
Ah, good point! Ugly it may be, but at least it works. Thanks for the idea!

Bryn


More information about the Haskell-Cafe mailing list