[Haskell-cafe] Has anyone looked into adding subtyping to Haskell?
Thomas Schilling
nominolo at googlemail.com
Thu May 31 11:10:53 EDT 2007
> I bring this up because I have been working on a Scheme compiler in
> Haskell for fun, and something like polymorphic variants would be quite
> convinent to allow you to specify versions of the AST (input ast, after
> closure conversion, after CPS transform, etc.), but allow you to write
> functions that work generically over all the ASTs (getting the free
> vars, pretty printing, etc.).
Proper subtyping or at least extendable ADTs would be nicer, but you
can have type-checked progress flags using phantom types, e.g.:
data LT flag = L String (LT flag) | A (LT flag) (LT flag) | Var String
data Input
data Renamed
data CPSed
data ConstPropd
rename :: LT Input -> LT Renamed
cps :: LT Renamed -> LT CPSed
constantPropagate :: LT CPSed -> LT ConstPropd
dumpExpr :: (forall a. LT a) -> String -- ignores progress flag
This way you have at least a way to check that the proper phases have
been run before.
It might even be possible to store different things in the nodes (not
tested), like in:
newtype Ident = MkIdent String
class VarType flag vt | flag -> vt
instance VarType Input String
instance VarType Renamed Ident
instance VarType CPSed Ident
instance VarType ConstPropd Ident
data LT flag = (VarType flag vt => L vt (LT flag)) | ...
(This probably doesn't work, but you get the idea.)
/ Thomas
More information about the Haskell-Cafe
mailing list