The argument order for the function passed to foldl' had gotten flipped
This commit is contained in:
parent
dfe9869472
commit
02ee1c7e34
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Reference in a new issue