mirror of
https://github.com/digital-asset/daml.git
synced 2024-09-20 17:28:46 +03:00
1bd117bcec
* Inline typeclasses and apply projections. This draft PR: * adds a Subst module for substitution within LF expressions. This implementation piggybacks on the existing type substition. But there are not enough tests yet. * passes World data into the simplifier, in order to have have the ability to inline functions (selectively) * inlines typeclass dictionaries and projection functions * beta reduces type lambdas (which are just ignored by speedy afaik) * beta reduces lambdas that are passed units or dictionaries * runs the simplifier twice so it has a change to perform the inlining, reduction, AND projection -- this is probably avoidable by sequencing the simplifier steps in a specific order, but running the simplifier twice is simple enough for now. * together, these fix #5748 (see result on a toy module) TODO: * add lots of tests for Subst * run this on a benchmark to see how big of a difference it makes. * reduce the jankiness of running the simplifier twice. Results: DAML input: ``` module Main where hello : Int hello = 10 + 30 ``` Original DAML-LF output: ``` module Main where @location(7:0-7:5) def hello : Int64 = a284919a95c4a515cd1efac0d89be302d0e9d61e692a2176128c871ad8067e36:GHC.Num:+ @Int64 a284919a95c4a515cd1efac0d89be302d0e9d61e692a2176128c871ad8067e36:GHC.Num:$fAdditiveInt 10 30 ``` Current DAML-LF output: ``` module Main where @location(7:0-7:5) def hello : Int64 = ADD_INT64 10 30 ``` changelog_begin changelog_end * Update copyright header * Lint * More direct typeclass simplification * extendWorldSelf + getTypeClassDictionary * Fix visual * Fix visual comment * Disable cross-module inlining for incremental builds * Cleanup subst/freevars. * copyright header * Alpha equivalence for LF expressions. * copyright header * lots of tests * fix comment * Apply review suggestions |
||
---|---|---|
.. | ||
src/DA | ||
BUILD.bazel |