
Hello, `return` is the initial value. So, `replicate x oveKnignt)` is a list of functions. `foldr` folds them with initial value `return` with the `<=<` between them: functions are folding with (<=<). First folding value is `return` function. You can check the types with :t something in the GHCi. Result of folding is flow of functions or long functions circuit. `return start` is the same as to pass `start` to this functions circuit: inMany x start = foldr (<=<) return (replicate x oveKnight) $ start Idea seems, to make from [KnighPos -> [KnighPos]] functions list one function: KnighPos -> [KnighPos] performing those functions step by step (<=<) and to pass `start` to it. Due to `<=<` joining of functions is not "do", but "do for each...", because <=< is in the list monad. Something like: for x in f-last start: for y in f-prelast x: ... You can look at these types: :t foldr foldr :: Foldable t => (a -> b -> b) -> b -> t a -> b :t (<=<) (<=<) :: Monad m => (b -> m c) -> (a -> m b) -> a -> m c 26.07.2018 04:44, Olumide wrotes:
Dear List,
Chapter 13 of LYAH (http://learnyouahaskell.com/for-a-few-monads-more#useful-monadic-functions) has the following code block
import Data.List
inMany :: Int -> KnightPos -> [KnightPos] inMany x start = return start >>= foldr (<=<) return (replicate x oveKnight)
What I'd like to know is where the accumulator of foldr is in this example.
Regards,
- Olumide
_______________________________________________ Beginners mailing list Beginners@haskell.org http://mail.haskell.org/cgi-bin/mailman/listinfo/beginners