2016-01-10 4 views
1

Я пытаюсь написать простой тип данных для математических выражений. Код я прямо сейчас:Алгебраический тип данных в Haskell

data Expr 
    = Num Double 
    | Add Expr Expr 
    | Mul Expr Expr 
    | Sin Expr 
    | Cos Expr 
    | X 
    deriving Eq 

Это работает, как ожидалось, но я хочу, чтобы сделать его проще только одна линия для бинарных операторов (Добавить и Mul) и один для унарные (Sin и Cos). Какие-либо предложения?

ответ

6

Вы можете использовать, например,

data BinOp = Add | Mul 
data UnaryOp = Sin | Cos 

data Expr 
    = Num Double 
    | Binary BinOp Expr Expr 
    | Unary UnaryOp Expr 

YMMV ли это проще.

+0

Большое спасибо. Он работал хорошо –

Смежные вопросы