From 3d707d0992e5a67c0af84017c2c9ce4890464c9e Mon Sep 17 00:00:00 2001 From: Marty Stumpf Date: Tue, 2 May 2023 09:02:13 -0700 Subject: [PATCH] Turn back on sm_pre_inline. --- plutus-tx-plugin/src/PlutusTx/Plugin.hs | 4 +- .../test/Optimization/trueOrError.plc.golden | 8 +- .../Optimization/trueOrErrorOpaque.plc.golden | 8 +- .../Plugin/Coverage/coverageCode.plc.golden | 345 ++++++++---------- .../Data/monomorphic/unusedWrapper.plc.golden | 10 +- .../Data/recursive/sameEmptyRose.plc.golden | 174 ++++----- .../Functions/recursive/even.plc.golden | 75 ++-- .../Functions/recursive/lazyLength.plc.golden | 127 +++---- .../recursive/strictLength.plc.golden | 137 ++++--- 9 files changed, 407 insertions(+), 481 deletions(-) diff --git a/plutus-tx-plugin/src/PlutusTx/Plugin.hs b/plutus-tx-plugin/src/PlutusTx/Plugin.hs index 881927d4d9f..e3a282bf919 100644 --- a/plutus-tx-plugin/src/PlutusTx/Plugin.hs +++ b/plutus-tx-plugin/src/PlutusTx/Plugin.hs @@ -10,7 +10,7 @@ {-# LANGUAGE TypeFamilies #-} {-# LANGUAGE ViewPatterns #-} -- For some reason this module is very slow to compile otherwise -{-# OPTIONS_GHC -O0 #-} +{-# OPTIONS_GHC -fforce-recomp -O0 #-} module PlutusTx.Plugin (plugin, plc) where import Data.Bifunctor @@ -165,7 +165,7 @@ mkSimplPass flags logger = , GHC.sm_rules = False , GHC.sm_cast_swizzle = True -- See Note [GHC.sm_pre_inline] - , GHC.sm_pre_inline = False + , GHC.sm_pre_inline = True , GHC.sm_logger = logger -- You might think you would need this, but apparently not , GHC.sm_inline = False diff --git a/plutus-tx-plugin/test/Optimization/trueOrError.plc.golden b/plutus-tx-plugin/test/Optimization/trueOrError.plc.golden index 1519b7ca6d4..d48a2348fc9 100644 --- a/plutus-tx-plugin/test/Optimization/trueOrError.plc.golden +++ b/plutus-tx-plugin/test/Optimization/trueOrError.plc.golden @@ -1,7 +1 @@ -(program - 1.1.0 - [ - (lam ds_i0 (delay (lam case_True_i0 (lam case_False_i0 case_True_i2)))) - (error ) - ] -) \ No newline at end of file +(program 1.1.0 [ (lam ds_i0 (constr 0)) (error ) ]) \ No newline at end of file diff --git a/plutus-tx-plugin/test/Optimization/trueOrErrorOpaque.plc.golden b/plutus-tx-plugin/test/Optimization/trueOrErrorOpaque.plc.golden index 1519b7ca6d4..d48a2348fc9 100644 --- a/plutus-tx-plugin/test/Optimization/trueOrErrorOpaque.plc.golden +++ b/plutus-tx-plugin/test/Optimization/trueOrErrorOpaque.plc.golden @@ -1,7 +1 @@ -(program - 1.1.0 - [ - (lam ds_i0 (delay (lam case_True_i0 (lam case_False_i0 case_True_i2)))) - (error ) - ] -) \ No newline at end of file +(program 1.1.0 [ (lam ds_i0 (constr 0)) (error ) ]) \ No newline at end of file diff --git a/plutus-tx-plugin/test/Plugin/Coverage/coverageCode.plc.golden b/plutus-tx-plugin/test/Plugin/Coverage/coverageCode.plc.golden index 8581a9b51f2..77fcf8f2c82 100644 --- a/plutus-tx-plugin/test/Plugin/Coverage/coverageCode.plc.golden +++ b/plutus-tx-plugin/test/Plugin/Coverage/coverageCode.plc.golden @@ -10,6 +10,38 @@ (vardecl Just (fun a [ Maybe a ])) (vardecl Nothing [ Maybe a ]) ) ) + (datatypebind + (datatype + (tyvardecl Bool (type)) + + Bool_match + (vardecl True Bool) (vardecl False Bool) + ) + ) + (termbind + (strict) + (vardecl fail (fun (con unit) [ Maybe Bool ])) + (lam + ds + (con unit) + { + { + [ + [ + { (builtin trace) (all dead (type) (all a (type) [ Maybe a ])) } + (con + string + "CoverLocation (CovLoc {_covLocFile = \"test/Plugin/Coverage/Spec.hs\", _covLocStartLine = 42, _covLocEndLine = 42, _covLocStartCol = 26, _covLocEndCol = 33})" + ) + ] + (abs dead (type) Nothing) + ] + (all dead (type) dead) + } + Bool + } + ) + ) (termbind (strict) (vardecl equalsInteger (fun (con integer) (fun (con integer) (con bool)))) @@ -20,14 +52,6 @@ (vardecl ifThenElse (all a (type) (fun (con bool) (fun a (fun a a))))) (builtin ifThenElse) ) - (datatypebind - (datatype - (tyvardecl Bool (type)) - - Bool_match - (vardecl True Bool) (vardecl False Bool) - ) - ) (termbind (strict) (vardecl equalsInteger (fun (con integer) (fun (con integer) Bool))) @@ -235,208 +259,161 @@ ] ) ) - (termbind - (strict) - (vardecl fun (fun [ Maybe (con integer) ] [ Maybe Bool ])) - (lam - x - [ Maybe (con integer) ] - { + (lam + x + [ Maybe (con integer) ] + { + [ [ - [ - { (builtin trace) (all dead (type) [ Maybe Bool ]) } - (con - string - "CoverLocation (CovLoc {_covLocFile = \"test/Plugin/Coverage/Spec.hs\", _covLocStartLine = 40, _covLocEndLine = 42, _covLocStartCol = 1, _covLocEndCol = 33})" - ) - ] - (abs - dead - (type) - { + { (builtin trace) (all dead (type) [ Maybe Bool ]) } + (con + string + "CoverLocation (CovLoc {_covLocFile = \"test/Plugin/Coverage/Spec.hs\", _covLocStartLine = 36, _covLocEndLine = 36, _covLocStartCol = 54, _covLocEndCol = 57})" + ) + ] + (abs + dead + (type) + { + [ [ - [ - { - [ { Maybe_match (con integer) } x ] - (all dead (type) [ Maybe Bool ]) - } - (lam - y - (con integer) - (abs - dead - (type) + { (builtin trace) (all dead (type) [ Maybe Bool ]) } + (con + string + "CoverLocation (CovLoc {_covLocFile = \"test/Plugin/Coverage/Spec.hs\", _covLocStartLine = 40, _covLocEndLine = 42, _covLocStartCol = 1, _covLocEndCol = 33})" + ) + ] + (abs + dead + (type) + { + [ + [ { - [ - [ - { - (builtin trace) (all dead (type) [ Maybe Bool ]) - } - (con - string - "CoverLocation (CovLoc {_covLocFile = \"test/Plugin/Coverage/Spec.hs\", _covLocStartLine = 41, _covLocEndLine = 41, _covLocStartCol = 12, _covLocEndCol = 22})" - ) - ] - (abs - dead - (type) - { + [ { Maybe_match (con integer) } x ] + (all dead (type) [ Maybe Bool ]) + } + (lam + y + (con integer) + (abs + dead + (type) + { + [ [ - [ - { + { + (builtin trace) + (all dead (type) [ Maybe Bool ]) + } + (con + string + "CoverLocation (CovLoc {_covLocFile = \"test/Plugin/Coverage/Spec.hs\", _covLocStartLine = 41, _covLocEndLine = 41, _covLocStartCol = 12, _covLocEndCol = 22})" + ) + ] + (abs + dead + (type) + { + [ [ - Bool_match - [ - otherFun - { - [ - [ - { - (builtin trace) - (all - dead (type) (con integer) - ) - } - (con - string - "CoverLocation (CovLoc {_covLocFile = \"test/Plugin/Coverage/Spec.hs\", _covLocStartLine = 41, _covLocEndLine = 41, _covLocStartCol = 21, _covLocEndCol = 22})" - ) - ] - (abs dead (type) y) - ] - (all dead (type) dead) - } - ] - ] - (all dead (type) [ Maybe Bool ]) - } - (abs - dead - (type) - { - [ + { [ - { - (builtin trace) - (all dead (type) [ Maybe Bool ]) - } - (con - string - "CoverLocation (CovLoc {_covLocFile = \"test/Plugin/Coverage/Spec.hs\", _covLocStartLine = 41, _covLocEndLine = 41, _covLocStartCol = 26, _covLocEndCol = 36})" - ) - ] - (abs - dead - (type) + Bool_match [ - { Just Bool } + otherFun { [ [ { (builtin trace) - (all dead (type) Bool) + (all + dead + (type) + (con integer) + ) } (con string - "CoverLocation (CovLoc {_covLocFile = \"test/Plugin/Coverage/Spec.hs\", _covLocStartLine = 41, _covLocEndLine = 41, _covLocStartCol = 31, _covLocEndCol = 36})" + "CoverLocation (CovLoc {_covLocFile = \"test/Plugin/Coverage/Spec.hs\", _covLocStartLine = 41, _covLocEndLine = 41, _covLocStartCol = 21, _covLocEndCol = 22})" ) ] - (abs dead (type) False) + (abs dead (type) y) ] (all dead (type) dead) } ] - ) - ] - (all dead (type) dead) - } - ) - ] - (abs - dead - (type) - { - { - [ - [ - { - (builtin trace) - (all + ] + (all dead (type) [ Maybe Bool ]) + } + (abs + dead + (type) + { + [ + [ + { + (builtin trace) + (all + dead (type) [ Maybe Bool ] + ) + } + (con + string + "CoverLocation (CovLoc {_covLocFile = \"test/Plugin/Coverage/Spec.hs\", _covLocStartLine = 41, _covLocEndLine = 41, _covLocStartCol = 26, _covLocEndCol = 36})" + ) + ] + (abs dead (type) - (all a (type) [ Maybe a ]) + [ + { Just Bool } + { + [ + [ + { + (builtin trace) + (all dead (type) Bool) + } + (con + string + "CoverLocation (CovLoc {_covLocFile = \"test/Plugin/Coverage/Spec.hs\", _covLocStartLine = 41, _covLocEndLine = 41, _covLocStartCol = 31, _covLocEndCol = 36})" + ) + ] + (abs dead (type) False) + ] + (all dead (type) dead) + } + ] ) - } - (con - string - "CoverLocation (CovLoc {_covLocFile = \"test/Plugin/Coverage/Spec.hs\", _covLocStartLine = 42, _covLocEndLine = 42, _covLocStartCol = 26, _covLocEndCol = 33})" - ) - ] - (abs dead (type) Nothing) - ] - (all dead (type) dead) - } - Bool - } - ) - ] - (all dead (type) dead) - } - ) - ] - (all dead (type) dead) - } - ) - ) - ] - (abs - dead - (type) - { - { - [ - [ - { - (builtin trace) - (all dead (type) (all a (type) [ Maybe a ])) + ] + (all dead (type) dead) + } + ) + ] + (abs dead (type) [ fail (con unit ()) ]) + ] + (all dead (type) dead) + } + ) + ] + (all dead (type) dead) } - (con - string - "CoverLocation (CovLoc {_covLocFile = \"test/Plugin/Coverage/Spec.hs\", _covLocStartLine = 42, _covLocEndLine = 42, _covLocStartCol = 26, _covLocEndCol = 33})" - ) - ] - (abs dead (type) Nothing) - ] - (all dead (type) dead) - } - Bool - } - ) - ] - (all dead (type) dead) - } - ) - ] - (all dead (type) dead) - } - ) - ) - { - [ - [ - { - (builtin trace) - (all dead (type) (fun [ Maybe (con integer) ] [ Maybe Bool ])) - } - (con - string - "CoverLocation (CovLoc {_covLocFile = \"test/Plugin/Coverage/Spec.hs\", _covLocStartLine = 36, _covLocEndLine = 36, _covLocStartCol = 54, _covLocEndCol = 57})" + ) + ) + ] + (abs dead (type) [ fail (con unit ()) ]) + ] + (all dead (type) dead) + } + ) + ] + (all dead (type) dead) + } ) ] - (abs dead (type) fun) - ] - (all dead (type) dead) - } + (all dead (type) dead) + } + ) ) ) \ No newline at end of file diff --git a/plutus-tx-plugin/test/Plugin/Data/monomorphic/unusedWrapper.plc.golden b/plutus-tx-plugin/test/Plugin/Data/monomorphic/unusedWrapper.plc.golden index d787f7f5c95..381fabe5aa8 100644 --- a/plutus-tx-plugin/test/Plugin/Data/monomorphic/unusedWrapper.plc.golden +++ b/plutus-tx-plugin/test/Plugin/Data/monomorphic/unusedWrapper.plc.golden @@ -2,8 +2,6 @@ 1.1.0 (let (nonrec) - (termbind (strict) (vardecl z (con integer)) (con integer 2)) - (termbind (strict) (vardecl y (con integer)) (con integer 1)) (datatypebind (datatype (tyvardecl Tuple2 (fun (type) (fun (type) (type)))) @@ -40,6 +38,12 @@ (vardecl mkT (fun [ [ Tuple2 (con integer) ] (con integer) ] T)) (lam ds [ [ Tuple2 (con integer) ] (con integer) ] [ WMkT ds ]) ) - [ mkT [ [ { { Tuple2 (con integer) } (con integer) } z ] y ] ] + [ + mkT + [ + [ { { Tuple2 (con integer) } (con integer) } (con integer 2) ] + (con integer 1) + ] + ] ) ) \ No newline at end of file diff --git a/plutus-tx-plugin/test/Plugin/Data/recursive/sameEmptyRose.plc.golden b/plutus-tx-plugin/test/Plugin/Data/recursive/sameEmptyRose.plc.golden index 7c763a81b06..34258294023 100644 --- a/plutus-tx-plugin/test/Plugin/Data/recursive/sameEmptyRose.plc.golden +++ b/plutus-tx-plugin/test/Plugin/Data/recursive/sameEmptyRose.plc.golden @@ -24,62 +24,15 @@ EmptyRose_match_i0 [ (lam - f_i0 + tup_i0 [ (lam - g_i0 + map_i0 [ (lam tup_i0 [ - (lam - map_i0 - [ - (lam - tup_i0 - [ - (lam go_i0 go_i1) - [ - (force tup_i1) - (lam - arg_0_i0 arg_0_i1 - ) - ] - ] - ) - (delay - (lam - f_i0 - [ - f_i1 - [ - (force - (force fix1_i11) - ) - (lam - go_i0 - (lam - x_i0 - [ - g_i6 - [ - [ - map_i4 - go_i2 - ] - [ - f_i7 x_i1 - ] - ] - ] - ) - ) - ] - ] - ) - ) - ] - ) + (lam go_i0 go_i1) [ (force tup_i1) (lam arg_0_i0 arg_0_i1) @@ -94,57 +47,24 @@ [ (force (force fix1_i9)) (lam - map_i0 + go_i0 (lam - ds_i0 - (lam - ds_i0 - (force + x_i0 + [ + EmptyRose_i7 + [ + [ map_i4 go_i2 ] [ - [ - (force - [ - (force - Nil_match_i9 - ) - ds_i1 - ] - ) - (delay - (force - Nil_i11 - ) - ) - ] - (lam - x_i0 - (lam - xs_i0 - (delay - [ - [ - (force - Cons_i12 - ) - [ - ds_i4 - x_i2 - ] - ] - [ - [ - map_i5 - ds_i4 - ] - xs_i1 - ] - ] - ) - ) + (force + [ + EmptyRose_match_i6 + x_i1 + ] ) + (lam x_i0 x_i1) ] - ) - ) + ] + ] ) ) ] @@ -153,15 +73,61 @@ ) ] ) - (lam ds_i0 [ EmptyRose_i4 ds_i1 ]) + [ + (force tup_i1) (lam arg_0_i0 arg_0_i1) + ] ] ) - (lam - ds_i0 - [ - (force [ EmptyRose_match_i2 ds_i1 ]) - (lam x_i0 x_i1) - ] + (delay + (lam + f_i0 + [ + f_i1 + [ + (force (force fix1_i7)) + (lam + map_i0 + (lam + ds_i0 + (lam + ds_i0 + (force + [ + [ + (force + [ + (force Nil_match_i7) + ds_i1 + ] + ) + (delay (force Nil_i9)) + ] + (lam + x_i0 + (lam + xs_i0 + (delay + [ + [ + (force Cons_i10) + [ ds_i4 x_i2 ] + ] + [ + [ map_i5 ds_i4 ] + xs_i1 + ] + ] + ) + ) + ) + ] + ) + ) + ) + ) + ] + ] + ) ) ] ) diff --git a/plutus-tx-plugin/test/Plugin/Functions/recursive/even.plc.golden b/plutus-tx-plugin/test/Plugin/Functions/recursive/even.plc.golden index deaa12b5934..d222c1e0496 100644 --- a/plutus-tx-plugin/test/Plugin/Functions/recursive/even.plc.golden +++ b/plutus-tx-plugin/test/Plugin/Functions/recursive/even.plc.golden @@ -49,50 +49,53 @@ ) (let (rec) - (termbind - (strict) - (vardecl odd (fun (con integer) Bool)) - (lam - n - (con integer) - { - [ - [ - { - [ Bool_match [ [ equalsInteger n ] (con integer 0) ] ] - (all dead (type) Bool) - } - (abs dead (type) False) - ] - (abs - dead (type) [ even [ [ subtractInteger n ] (con integer 1) ] ] - ) - ] - (all dead (type) dead) - } - ) - ) (termbind (strict) (vardecl even (fun (con integer) Bool)) (lam n (con integer) - { - [ + (let + (nonrec) + (termbind + (nonstrict) + (vardecl n (con integer)) + [ [ subtractInteger n ] (con integer 1) ] + ) + { [ - { - [ Bool_match [ [ equalsInteger n ] (con integer 0) ] ] - (all dead (type) Bool) - } - (abs dead (type) True) + [ + { + [ Bool_match [ [ equalsInteger n ] (con integer 0) ] ] + (all dead (type) Bool) + } + (abs dead (type) True) + ] + (abs + dead + (type) + { + [ + [ + { + [ Bool_match [ [ equalsInteger n ] (con integer 0) ] ] + (all dead (type) Bool) + } + (abs dead (type) False) + ] + (abs + dead + (type) + [ even [ [ subtractInteger n ] (con integer 1) ] ] + ) + ] + (all dead (type) dead) + } + ) ] - (abs - dead (type) [ odd [ [ subtractInteger n ] (con integer 1) ] ] - ) - ] - (all dead (type) dead) - } + (all dead (type) dead) + } + ) ) ) even diff --git a/plutus-tx-plugin/test/Plugin/Functions/recursive/lazyLength.plc.golden b/plutus-tx-plugin/test/Plugin/Functions/recursive/lazyLength.plc.golden index c69ed808a47..e3e837422e2 100644 --- a/plutus-tx-plugin/test/Plugin/Functions/recursive/lazyLength.plc.golden +++ b/plutus-tx-plugin/test/Plugin/Functions/recursive/lazyLength.plc.golden @@ -1,88 +1,81 @@ (program 1.1.0 (let - (nonrec) - (termbind (strict) (vardecl eta (con integer)) (con integer 0)) + (rec) + (datatypebind + (datatype + (tyvardecl List (fun (type) (type))) + (tyvardecl a (type)) + Nil_match + (vardecl Nil [ List a ]) + (vardecl Cons (fun a (fun [ List a ] [ List a ]))) + ) + ) (let - (rec) - (datatypebind - (datatype - (tyvardecl List (fun (type) (type))) - (tyvardecl a (type)) - Nil_match - (vardecl Nil [ List a ]) - (vardecl Cons (fun a (fun [ List a ] [ List a ]))) + (nonrec) + (termbind + (strict) + (vardecl + addInteger (fun (con integer) (fun (con integer) (con integer))) ) + (builtin addInteger) ) - (let - (nonrec) - (termbind - (strict) - (vardecl - addInteger (fun (con integer) (fun (con integer) (con integer))) - ) - (builtin addInteger) - ) - (termbind - (strict) - (vardecl - addInteger (fun (con integer) (fun (con integer) (con integer))) - ) - (lam x (con integer) (lam y (con integer) [ [ addInteger x ] y ])) + (termbind + (strict) + (vardecl + addInteger (fun (con integer) (fun (con integer) (con integer))) ) - (termbind - (strict) - (vardecl lengthLazy (all a (type) (fun [ List a ] (con integer)))) - (abs - a - (type) - (let - (rec) - (termbind - (strict) - (vardecl go (fun (con integer) (fun [ List a ] (con integer)))) + (lam x (con integer) (lam y (con integer) [ [ addInteger x ] y ])) + ) + (termbind + (strict) + (vardecl lengthLazy (all a (type) (fun [ List a ] (con integer)))) + (abs + a + (type) + (let + (rec) + (termbind + (strict) + (vardecl go (fun (con integer) (fun [ List a ] (con integer)))) + (lam + acc + (con integer) (lam - acc - (con integer) - (lam - ds - [ List a ] - { + ds + [ List a ] + { + [ [ - [ - { - [ { Nil_match a } ds ] - (all dead (type) (con integer)) - } - (abs dead (type) acc) - ] + { + [ { Nil_match a } ds ] (all dead (type) (con integer)) + } + (abs dead (type) acc) + ] + (lam + ds + a (lam - ds - a - (lam - tl - [ List a ] - (abs - dead - (type) - [ - [ go [ [ addInteger acc ] (con integer 1) ] ] tl - ] - ) + tl + [ List a ] + (abs + dead + (type) + [ [ go [ [ addInteger acc ] (con integer 1) ] ] tl ] ) ) - ] - (all dead (type) dead) - } - ) + ) + ] + (all dead (type) dead) + } ) ) - (lam l [ List a ] [ [ go eta ] l ]) ) + (lam l [ List a ] [ [ go (con integer 0) ] l ]) ) ) - { lengthLazy (con integer) } ) + { lengthLazy (con integer) } ) ) ) \ No newline at end of file diff --git a/plutus-tx-plugin/test/Plugin/Functions/recursive/strictLength.plc.golden b/plutus-tx-plugin/test/Plugin/Functions/recursive/strictLength.plc.golden index 777bc9ce7ec..ad1887c6f80 100644 --- a/plutus-tx-plugin/test/Plugin/Functions/recursive/strictLength.plc.golden +++ b/plutus-tx-plugin/test/Plugin/Functions/recursive/strictLength.plc.golden @@ -1,93 +1,88 @@ (program 1.1.0 (let - (nonrec) - (termbind (strict) (vardecl eta (con integer)) (con integer 0)) + (rec) + (datatypebind + (datatype + (tyvardecl List (fun (type) (type))) + (tyvardecl a (type)) + Nil_match + (vardecl Nil [ List a ]) + (vardecl Cons (fun a (fun [ List a ] [ List a ]))) + ) + ) (let - (rec) - (datatypebind - (datatype - (tyvardecl List (fun (type) (type))) - (tyvardecl a (type)) - Nil_match - (vardecl Nil [ List a ]) - (vardecl Cons (fun a (fun [ List a ] [ List a ]))) + (nonrec) + (termbind + (strict) + (vardecl + addInteger (fun (con integer) (fun (con integer) (con integer))) ) + (builtin addInteger) ) - (let - (nonrec) - (termbind - (strict) - (vardecl - addInteger (fun (con integer) (fun (con integer) (con integer))) - ) - (builtin addInteger) - ) - (termbind - (strict) - (vardecl - addInteger (fun (con integer) (fun (con integer) (con integer))) - ) - (lam x (con integer) (lam y (con integer) [ [ addInteger x ] y ])) + (termbind + (strict) + (vardecl + addInteger (fun (con integer) (fun (con integer) (con integer))) ) - (termbind - (strict) - (vardecl lengthStrict (all a (type) (fun [ List a ] (con integer)))) - (abs - a - (type) - (let - (rec) - (termbind - (strict) - (vardecl go (fun (con integer) (fun [ List a ] (con integer)))) + (lam x (con integer) (lam y (con integer) [ [ addInteger x ] y ])) + ) + (termbind + (strict) + (vardecl lengthStrict (all a (type) (fun [ List a ] (con integer)))) + (abs + a + (type) + (let + (rec) + (termbind + (strict) + (vardecl go (fun (con integer) (fun [ List a ] (con integer)))) + (lam + acc + (con integer) (lam - acc - (con integer) - (lam - ds - [ List a ] - (let - (nonrec) - (termbind (strict) (vardecl acc (con integer)) acc) - { + ds + [ List a ] + (let + (nonrec) + (termbind (strict) (vardecl acc (con integer)) acc) + { + [ [ - [ - { - [ { Nil_match a } ds ] - (all dead (type) (con integer)) - } - (abs dead (type) acc) - ] + { + [ { Nil_match a } ds ] + (all dead (type) (con integer)) + } + (abs dead (type) acc) + ] + (lam + ds + a (lam - ds - a - (lam - tl - [ List a ] - (abs - dead - (type) - [ - [ go [ [ addInteger acc ] (con integer 1) ] ] - tl - ] - ) + tl + [ List a ] + (abs + dead + (type) + [ + [ go [ [ addInteger acc ] (con integer 1) ] ] tl + ] ) ) - ] - (all dead (type) dead) - } - ) + ) + ] + (all dead (type) dead) + } ) ) ) - (lam l [ List a ] [ [ go eta ] l ]) ) + (lam l [ List a ] [ [ go (con integer 0) ] l ]) ) ) - { lengthStrict (con integer) } ) + { lengthStrict (con integer) } ) ) ) \ No newline at end of file