[Haskell-cafe] Problem trying to get class Bounded to work

Bulat Ziganshin bulat.ziganshin at gmail.com
Tue May 23 11:47:07 EDT 2006


Hello Jacques,

Tuesday, May 23, 2006, 7:13:33 PM, you wrote:

>>>>malloc :: Storable a => IO (Ptr a)
>>>>malloc  = doMalloc undefined
>>>>where
>>>>  doMalloc       :: Storable b => b -> IO (Ptr b)
>>>>  doMalloc dummy  = mallocBytes (sizeOf dummy)
>>>Is there any reason to not code this as
>>>
>>>malloc :: Storable a => IO (Ptr a)
>>>malloc  = mallocBytes $ sizeof undefined

well

1) in your code type of 'undefined' is unknown. it can be any type,
while we need 'undefined' of one concrete type, which is given in
function signature. compiler will just complain that type is not fixed
here


2) what we really need is to write

malloc :: Storable a => IO (Ptr a)
malloc  = mallocBytes $ sizeof (undefined::a)

i.e. fix type of 'undefined' to 'a'. but that is impossible in
Haskell-98


3) GHC provides language extension (see above in the thread), that
allow to use 'a' in function body if function was declared using
'forall', so this works in GHC

malloc :: forall a . Storable a => IO (Ptr a)
malloc  = mallocBytes $ sizeof (undefined::a)


4) this example is borrowed from std libs, what is common for hugs,
ghc and nhc, so they can't use ghc-specific solution. instead, this
complex trick is used. it's very unobvious, but at least it works with
any H98-compatible compiler

-- 
Best regards,
 Bulat                            mailto:Bulat.Ziganshin at gmail.com



More information about the Haskell-Cafe mailing list