Я пишу AST для создания DSL в Haskell, и для этого я использую GADTs определить такие выражения, как:Как определить типы в DSL в Haskell?
data Expr a where
I :: Int -> Expr Int
B :: Bool -> Expr Bool
Add :: Expr Int -> Expr Int -> Expr Int
Mul :: Expr Int -> Expr Int -> Expr Int
Eq :: Expr Int -> Expr Int -> Expr Bool
Однако, я хотел бы для выражения типа Add и Mul в также работают с другими числовыми значениями, от типов Float и Double. Как я смогу добиться таких результатов?
Для вашего простого случая использования это может быть просто - 'Добавить :: Num а => Expr а -> Expr а -> Expr a' –
@AnupamJain Это должно вероятно быть ответом – jkeuhlen