dataExpr a where I :: Int -> ExprInt B :: Bool -> ExprBool Add :: ExprInt -> ExprInt -> ExprInt
eval :: Expr a -> a eval (I x) = x eval (B x) = x eval (Add x y) = eval x + eval y
someFunc :: IO () someFunc = do let expr = Add (I3) (I4) print (eval expr) -- 输出 7
能使用类型没有定义的变量
1 2 3 4 5 6 7 8 9 10
dataDynamicSql where ConstSql :: Text -> DynamicSql -- 变量a并没有在DynamicSql类型中定义,也就是DynamicSql a ValSql :: PersistField a => a -> DynamicSql MaybeSql :: (a -> DynamicSql) -> Maybe a -> DynamicSql