haskell/sc-mini-pfp/Deforester.hs

module Deforester where

import Data
import DataUtil
import Driving
import Folding
import Generator
import Prototype

deforest :: Task -> Task
deforest (e, p) =
    residuate $ simplify $ foldTree $ buildFTree (driveMachine p) e

simplify :: Graph Conf -> Graph Conf
simplify (Node e (Decompose ts)) =
    Node e (Decompose $ map simplify ts)
simplify (Node e (Variants cs)) =
    Node e (Variants [(c, simplify t) | (c, t) <- cs])
simplify (Node e (Transient t)) | isBase e t =
    Node e $ Transient $ simplify t
simplify (Node e (Transient t)) =
    simplify t
simplify t = t