Functional dependencies don't work in my case. Actually, I don't see why they should.

What seems to be needed here is a type class construct with a kind of record parameter so that instance conflicts cannot occur.

Jules Bean wrote:

Ben Franksen wrote:

Ryan Ingram wrote:

On 12/5/07, Ben Franksen <[EMAIL PROTECTED]> wrote:
You would have to use functional dependencies or associated types to
eliminate this error. Alternatively, you can add a dummy argument of type "block" and pass "undefined :: BlockType" in to help choose the instance
declaration.


Sounds reasonable, and in fact that was what I tried first. However

data Command = Skip

class Java block command | command -> block where
  block_ :: [command] -> block

  compBlock :: [Command] -> block
  compBlock = block_ . map compCommand

  compCommand :: Command -> command

still gives

    Could not deduce (Java block command1)
      from the context (Java block command)
      arising from use of `block_' at Bla.hs:7:14-19
    Possible fix:
      add (Java block command1)
      to the class or instance method `compBlock'
    In the first argument of `(.)', namely `block_'
    In the expression: block_ . (map compCommand)
    In the definition of `compBlock':
        compBlock = block_ . (map compCommand)

which is /exactly/ the same error as I get w/o the fundep.


Yes, because command determines block but block doesn't determine command.

So in a usage of 'compBlock' it has no way of deciding which 'command' to use, although it can choose the block from the return type.

You could have command -> block, block -> command, if that is indeed true.

Jule
_______________________________________________
Haskell-Cafe mailing list
[email protected]
http://www.haskell.org/mailman/listinfo/haskell-cafe



--
Prof. Dr. Peter Padawitz
Informatik 1 University of Dortmund D-44221 Dortmund Germany phone +49-231-755-5108
fax             +49-231-755-6555
secretary       +49-231-755-6223
email           [EMAIL PROTECTED]
internet        http://funlog.padawitz.de

_______________________________________________
Haskell-Cafe mailing list
[email protected]
http://www.haskell.org/mailman/listinfo/haskell-cafe

Reply via email to