The argument order for the function passed to foldl' had gotten flipped

This commit is contained in:
John Wiegley 2018-04-17 18:30:05 -07:00
parent dfe9869472
commit 02ee1c7e34
2 changed files with 17 additions and 3 deletions

View file

@ -292,9 +292,11 @@ all_ fun xs = fun >>= \f ->
foldl'_ :: forall e m. MonadBuiltins e m
=> m (NValue m) -> m (NValue m) -> m (NValue m) -> m (NValue m)
foldl'_ fun z xs = fun >>= \f ->
fromValue @[NThunk m] xs >>=
foldl' (\b a -> f `callFunc` force' a >>= (`callFunc` b)) z
foldl'_ fun z xs =
fun >>= \f -> fromValue @[NThunk m] xs >>= foldl' (go f) z
where
go f b a = b >>= \b' ->
f `callFunc` pure b' >>= (`callFunc` force' a)
head_ :: MonadBuiltins e m => m (NValue m) -> m (NValue m)
head_ = fromValue >=> \case

View file

@ -126,6 +126,18 @@ case_fixed_points =
in [ (fix f) (fix (extends g f)) ]
|]
case_fixed_points_and_fold =
constantEqualText' [i|[ {} {} ]|] [i|
let
extends = f: rattrs: self:
let super = rattrs self; in super // f self super;
flip = f: a: b: f b a;
toFixFold = builtins.foldl' (flip extends) (self: {}) ([(self: super: {})]);
toFix = extends (self: super: {}) (self: {});
fix = f: let x = f x; in x;
in [ (fix toFixFold) (fix toFix) ]
|]
-----------------------
tests :: TestTree