Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- (main)
- Where
- Define (main)
- (option_monad.flat_map
- ; (option_sequence.sequence ['some.1 & 'none & 'some.2 & 'nil])
- (option_sequence.sequence ['some.1 & 'some.2 & 'nil])
- Func numbers
- Let {}
- (LIST.for_each numbers
- Func n [STDIO.printf <- "%d\n" <- n])
- In
- 'none)
- Where
- Let option_sequence (SEQUENCE option_monad)
- Where
- Let option_monad
- Define (map x f)
- Match x {
- | 'some.value 'some.(f value)
- | 'none 'none
- }
- Define (flatten x)
- Match x {
- | 'some.inner inner
- | 'none 'none
- }
- Define (pure value)
- 'some.value
- Define (flat_map x f)
- Match x {
- | 'none 'none
- | 'some.value (f value)
- }
- In
- {
- :map
- :flatten
- :pure
- :flat_map
- }
- Where
- Define (SEQUENCE MONAD)
- Define (sequence actions)
- Unfold actions
- Match actions {
- | 'nil (MONAD.pure 'nil)
- | 'cons.{action actions}
- (MONAD.flat_map action
- Func item
- (MONAD.map (Fold actions)
- Func items [item & items]))
- }
- In
- {
- :MONAD
- :sequence
- }
- Where
- Open Package "list" {:Infix &}
- Open Package "func" {:Infix <-}
- Where
- Let LIST Package "list"
- Let STDIO Package "stdio"
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement