Here's a different approach:

If you just want to make the typechecker distinguish between some
values but still have some functions that don't care what "subtype"
they are, you can use phantom types:

data Obj x = Obj X Y Z

data BlogObj
type Blog = Obj BlogObj

data CommentObj
type Comment = Obj CommentObj

data UserObj
type User = Obj UserObj

Now  you can write a function that takes a Blog, and it will refuse
other kinds of 'Obj'.  But you can still write a function that takes
'Obj x' and it will accept any kind of Obj.  So you don't need to do
any unwrapping if you leave the functions that matter polymorphic.
_______________________________________________
Haskell-Cafe mailing list
[email protected]
http://www.haskell.org/mailman/listinfo/haskell-cafe

Reply via email to