futhark-0.16.3: An optimising compiler for a functional, array-oriented language.
Safe HaskellTrustworthy



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.

Note that these changes are unfortunately not visible in the AST representation.



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.