amino/eff.py
def _flat_map(self, f: Callable):
        ''' **f** must return the same stack type as **self.value** has.
        Iterates over the effects, sequences the inner instance
        successively to the top and joins with the outer instance.
        Example:
        List(Right(Just(1))) => List(Right(Just(List(Right(Just(5))))))
        => List(List(Right(Just(Right(Just(5))))))
        => List(Right(Just(Right(Just(5)))))
        => List(Right(Right(Just(Just(5)))))
        => List(Right(Just(Just(5))))
        => List(Right(Just(5)))
        Note: IO works only as outermost effect, as it cannot sequence
        '''
        index = List.range(self.depth + 1)
        g = index.fold_left(f)(lambda z, i: lambda a: a.map(z))
        nested = g(self.value)
        def sequence_level(z, depth, tpe):
            nesting = lambda z, i: lambda a: a.map(z).sequence(tpe)
            lifter = List.range(depth).fold_left(I)(nesting)
            return z // lifter
        def sequence_type(z, data):
            return lambda a: sequence_level(a, *data).map(z)
        h = self.all_effects.reversed.with_index.fold_left(I)(sequence_type)
        return h(nested)
def _flat_map(self, f: Callable):
        ''' **f** must return the same stack type as **self.value** has.
        Iterates over the effects, sequences the inner instance
        successively to the top and joins with the outer instance.
        Example:
        List(Right(Just(1))) => List(Right(Just(List(Right(Just(5))))))
        => List(List(Right(Just(Right(Just(5))))))
        => List(Right(Just(Right(Just(5)))))
        => List(Right(Right(Just(Just(5)))))
        => List(Right(Just(Just(5))))
        => List(Right(Just(5)))
        Note: IO works only as outermost effect, as it cannot sequence
        '''
        index = List.range(self.depth + 1)
        g = index.fold_left(f)(lambda z, i: lambda a: a.map(z))
        nested = g(self.value)
        def sequence_level(z, depth, tpe):
            nesting = lambda z, i: lambda a: a.map(z).sequence(tpe)
            lifter = List.range(depth).fold_left(I)(nesting)
            return z // lifter
        def sequence_type(z, data):
            return lambda a: sequence_level(a, *data).map(z)
        h = self.all_effects.reversed.with_index.fold_left(I)(sequence_type)
        return h(nested)
def _flat_map ( self , f : Callable ) : index = List . range ( self . depth + 1 ) g = index . fold_left ( f ) ( lambda z , i : lambda a : a . map ( z ) ) nested = g ( self . value ) def sequence_level ( z , depth , tpe ) : nesting = lambda z , i : lambda a : a . map ( z ) . sequence ( tpe ) lifter = List . range ( depth ) . fold_left ( I ) ( nesting ) return z // lifter def sequence_type ( z , data ) : return lambda a : sequence_level ( a , * data ) . map ( z ) h = self . all_effects . reversed . with_index . fold_left ( I ) ( sequence_type ) return h ( nested )
**f** must return the same stack type as **self.value** has.
        Iterates over the effects, sequences the inner instance
        successively to the top and joins with the outer instance.
        Example:
        List(Right(Just(1))) => List(Right(Just(List(Right(Just(5))))))
        => List(List(Right(Just(Right(Just(5))))))
        => List(Right(Just(Right(Just(5)))))
        => List(Right(Right(Just(Just(5)))))
        => List(Right(Just(Just(5))))
        => List(Right(Just(5)))
        Note: IO works only as outermost effect, as it cannot sequence
** f ** must return the same stack type as ** self . value ** has . Iterates over the effects sequences the inner instance successively to the top and joins with the outer instance . Example : List ( Right ( Just ( 1 ))) = > List ( Right ( Just ( List ( Right ( Just ( 5 )))))) = > List ( List ( Right ( Just ( Right ( Just ( 5 )))))) = > List ( Right ( Just ( Right ( Just ( 5 ))))) = > List ( Right ( Right ( Just ( Just ( 5 ))))) = > List ( Right ( Just ( Just ( 5 )))) = > List ( Right ( Just ( 5 ))) Note : IO works only as outermost effect as it cannot sequence