there are packages which use phantom types to express inheritance
(subtype) relations. unfortunately i cannot find a simple example and
seem to misunderstand something. can somebody help with the following
simple example?

i have a most general type Dated, a subtype Note and a subsubtype Task. 
i have only instances for Note and Task, but operations for tasks and
dated. my primary question is: why should i have the contexts in the
classes (the code compiles without them)? they do not say more than what
is already expressed in the instance declarations. i do also not think
that i have used phantom types properly (eg. gtk2hs uses phantom types
differently).

what would be the proper solution? would it work for cases with multiple
inheritance?

thank you!  andrew


class CDated a
class CDated a => CNotes a
class CNotes a => CTasks a


instance CDated Task
instance CDated Note

instance CNotes Note
instance CNotes Task

instance CTasks Task

class Dated n where
    datedop :: n -> n
class Notes1 n where
    noteop :: n -> n
class Tasks1  n where
    taskop :: n -> n


data Note = Note Int
data Task = Task Int 


instance CTasks x => Tasks1 x  where
    taskop n = n

instance CDated x => Dated x  where
    datedop n = n

t:: Task = Task 1
n :: Note = Note 1

tt = taskop t
-- nt = taskop n   -- compiler error -- as expected!

tx = datedop t
nx = datedop n


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

Reply via email to