Safe Haskell | Safe-Infered |
---|
- data FunGraph a
- class ToFunGraph a where
- type NumT a
- data a :* b = a :* b
- data MVS a
- toFunGraph :: (Eq a, Hashable a, Show a, ToFunGraph b, ToFunGraph c, NumT b ~ a, NumT c ~ a) => b -> c -> IO (FunGraph a)
- countNodes :: FunGraph a -> Int
- fgInputs :: FunGraph a -> [MVS (GExpr a Int)]
- fgOutputs :: FunGraph a -> [MVS Int]
- fgLookupGExpr :: FunGraph a -> Int -> Maybe (GExpr a Int)
- fgReified :: FunGraph a -> [(Int, GExpr a Int)]
- topSort :: FunGraph a -> [Int]
- nodelistToFunGraph :: [(Int, GExpr a Int)] -> [MVS (GExpr a Int)] -> [MVS Int] -> FunGraph a
Documentation
class ToFunGraph a Source
ToFunGraph [[Expr a]] | |
ToFunGraph [Expr a] | |
ToFunGraph (Expr a) | |
(ToFunGraph a, ToFunGraph b, ~ * (NumT a) (NumT b)) => ToFunGraph (:* a b) |
a :* b |
(Show a, Show b) => Show (:* a b) | |
(ToFunGraph a, ToFunGraph b, ~ * (NumT a) (NumT b)) => ToFunGraph (:* a b) |
toFunGraph :: (Eq a, Hashable a, Show a, ToFunGraph b, ToFunGraph c, NumT b ~ a, NumT c ~ a) => b -> c -> IO (FunGraph a)Source
Take inputs and outputs which are of classes ToFunGraph (heterogenous lists of Expr a
)
and traverse the outputs reifying all expressions and creating a hashmap of StableNames (stable pointers).
Once the hashmap is created, lookup the provided inputs and return a FunGraph which contains an
expression graph, input/output indices, and other useful functions. StableNames is non-deterministic
so this function may return graphs with more or fewer CSE's eliminated.
If CSE is then performed on the graph, the result is deterministic.
countNodes :: FunGraph a -> IntSource