Hi,

The following program:

=============

module Main where

import Data.Maybe

fun :: Show a => String -> Maybe a -> IO ()

fun s mb = do
 putStrLn s
 case mb of
   Nothing -> return ()
   Just a -> do putStrLn (show a)
                         return ()


main = do fun "bla" Nothing
                 fun "foo" (Just "bar")


=============

compiles with Yhc and runs fine (even with only the first line of
main, so there is no mentioning that a String is wrapped in Maybe).

However another example (shortened mainly to type signatures):

================

putLine :: CNode a => String -> Maybe a -> CPS b ()

putLine s mbb k = getHTMLDocument $ \doc ->

...

                 let iac = case mbb of
                             Nothing -> addChild dv -- dv is also
some instance of TNode, basically
                             Just b -> insertChild b dv -- almost
anything in DOM is a node.
                 in ....
...

main = putLine "bla" (Nothing {-- :: Maybe TNode --}) $ id

....

addChild :: (CNode newChild, CNode zz) =>
             newChild -> zz -> CPS b zz


insertChild :: (CNode refChild, CNode newChild, CNode parent) =>
 refChild -> newChild -> parent -> CPS b parent

================

results in error:

-- during after type inference/checking
Error: No default for  DOM.Level1.Dom.CNode at 23:1-23:91.(Id 348,[(Id
1,Id 350)])

If I uncomment ::Maybe TNode then compilation succeeds.

The class CNode is defined without any methods:

class CNode a

data TNode = TNode

instance CNode TNode

Is there any difference between these two examples, or is it a bug? Or
too much context is involved in addChild and insertChild?

Thanks.

PS I haven't tried to compile the above code with Ghc, and I am
specifically interested in compilation by Yhc: this is a part of the
DOM/Javascript stuff.

--
Dimitry Golubovsky

Anywhere on the Web
_______________________________________________
Yhc mailing list
[email protected]
http://www.haskell.org/mailman/listinfo/yhc

Reply via email to