Serguey Zefirov (thesz) wrote,
Serguey Zefirov
thesz

Something worthwhile

Легкое использование полиморфизма для двух вариантов представления выражений. Произвольных - используется для представления выражения из кода программы, - и ограниченных по глубине, это используется в трехадресном коде.
data Expr sube conste =
    BinE BinOp sube sube
  | UnE  UnOp  sube
  | ZeroE conste

data BinOp = ...
data UnOp = ...

-- Общая часть.
data ConstVar = Var String | Const Float

-- Произвольное дерево. Используется где придется.
data TreeE = TreeEExpr (Expr TreeB ConstVar)

-- Только лишь бинарные и унарные операции. Static Single Assignment или трехадресные выражения.
data SSAE = SSAE (Expr ConstVar ConstVar)

-- Та же идея, только еще короче:
data ListOrMaybe a sub = Cons a sub | Nil

data ListNotMaybe a = ListNotMaybe a (ListNotMaybe a)
data MaybeNotList a = MaybeNotList a ()
Tags: Хаскель, компиляторы
Subscribe

  • Post a new comment

    Error

    Anonymous comments are disabled in this journal

    default userpic

    Your reply will be screened

    Your IP address will be recorded 

  • 9 comments