Created
September 25, 2019 05:48
-
-
Save makenowjust/0f323778fff44101195a8cd12f779973 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
object catsStateT { | |
import cats._, data._, implicits._ | |
val fa = StateT[Option, Boolean, Boolean] { | |
case true => None | |
case false => Some((true, false)) | |
} | |
val ff = StateT[Option, Boolean, Boolean => Boolean] { | |
case true => Some((true, x => !x)) | |
case false => Some((true, x => x)) | |
} | |
val fg = StateT[Option, Boolean, Boolean => Boolean] { | |
case true => Some((false, x => !x)) | |
case false => Some((true, x => !x)) | |
} | |
def test(): Unit = { | |
val x = (ff <+> fg) <*> fa | |
val y = (ff <*> fa) <+> (fg <*> fa) | |
println(s"((ff <+> fg) <+> fa) .run(true) ==> ${x.run(true)}") | |
println(s"((ff <+> fg) <+> fa) .run(false) ==> ${x.run(false)}") | |
println(s"((ff <*> fa) <+> (fg <*> fa)).run(true) ==> ${y.run(true)}") | |
println(s"((ff <*> fa) <+> (fg <*> fa)).run(false) ==> ${y.run(false)}") | |
} | |
// Result: | |
// ((ff <+> fg) <+> fa) .run(true) ==> None | |
// ((ff <+> fg) <+> fa) .run(false) ==> None | |
// ((ff <*> fa) <+> (fg <*> fa)).run(true) ==> Some((true,true)) | |
// ((ff <*> fa) <+> (fg <*> fa)).run(false) ==> None | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment