usr*_*usr 3 haskell types existential-type typeclass gadt
码:
data Exp a = Const a | Eq (Exp a) (Exp a)
Run Code Online (Sandbox Code Playgroud)
我希望Const a包含一个show类型的值,以便我可以在以后打印它.所以在C#中我会写:
class Const : Exp { IShow X; }
class Eq : Exp { Exp X, Y; }
Run Code Online (Sandbox Code Playgroud)
我怎么能在Haskell做到这一点?
{-# LANGUAGE GADTs #-}
data Exp a where
Const :: Show a => a -> Exp a
Eq :: Exp a -> Exp a -> Exp a
Run Code Online (Sandbox Code Playgroud)
如果你想在不同的分支中允许不同的数据类型,Eq那也没关系.
data Exp where
Const :: Show a => a -> Exp
Eq :: Exp -> Exp -> Exp
Run Code Online (Sandbox Code Playgroud)