Safe Haskell | Trustworthy |
---|---|
Language | Haskell2010 |
This monomorphization module converts a well-typed, polymorphic, module-free Futhark program into an equivalent monomorphic program.
This pass also does a few other simplifications to make the job of subsequent passes easier. Specifically, it does the following:
- Turn operator sections into explicit lambdas.
- Converts identifiers of record type into record patterns (and similarly for tuples).
- Converts applications of intrinsic SOACs into SOAC AST nodes (Map, Reduce, etc).
- Elide functions that are not reachable from an entry point (this is a side effect of the monomorphisation algorithm, which uses the entry points as roots).
- Turns implicit record fields into explicit record fields.
- Rewrite BinOp nodes to Apply nodes.
Note that these changes are unfortunately not visible in the AST representation.
Synopsis
- transformProg :: MonadFreshNames m => [Dec] -> m [ValBind]
Documentation
transformProg :: MonadFreshNames m => [Dec] -> m [ValBind] Source #
Monomorphise a list of top-level declarations. A module-free input program is expected, so only value declarations and type declaration are accepted.