Skip to content

Instantly share code, notes, and snippets.

@pasberth
Created May 8, 2013 17:18
Show Gist options
  • Save pasberth/5541989 to your computer and use it in GitHub Desktop.
Save pasberth/5541989 to your computer and use it in GitHub Desktop.
granjure で monad-zip
(use 'granjure.control.monad.zip)
(use 'granjure.data.list)
(use 'granjure.data.maybe)
(import '[granjure.data.maybe Just Nothing])
(println (do-mzip (x | x <- '(1 2 3))))
; (1 2 3)
(println (do-mzip (x | x <- '(1 2 3) :when (even? x))))
; (2)
(println (do-mzip ((list x y) | x <- '(1 2 3) :. y <- (range (inc x) 5))))
;((1 2) (1 3) (1 4) (2 3) (2 4) (3 4))
(println (do-mzip ((list x y) | x <- (range 1 5) :when (even? x) :. y <- (range (inc x) 5) :when (odd? y))))
;((2 3))
(println (do-mzip ((inc x) | x <- (Just. 42))))
; #granjure.data.maybe.Just{:a 43}
(println (do-mzip ((inc x) | x <- (Nothing.))))
; #granjure.data.maybe.Nothing{}
(println (do-mzip (x | x <- (Just. 42) :when (even? x))))
; #granjure.data.maybe.Just{:a 42}
(println (do-mzip (x | x <- (Just. 42) :when (odd? x))))
; #granjure.data.maybe.Nothing{}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment