package logikujo.atuin.FunctionalSamples import scalaz._ import Scalaz._ import scalaz.effects._ object App { def main(args: Array[String]):Unit = Palindrome.run } object Palindrome { def run:Unit = loop().unsafePerformIO def loop(a:Unit):IO[Unit] = showBanner >>=| readLn >>= palindrome >>= showResult >>= loop def showBanner:IO[Unit] = for { _ <- putStrLn("Little example to test if a line is a palindrome:") _ <- putStrLn("Enter a line:?") } yield () def palindrome(s:String):IO[Option[Boolean]] = io{(s != "quit") option ((s.reverse == s) ?? true)} def showResult(o:Option[Boolean]):IO[Unit] = o.some(_ ? (putStrLn("Is a palindrome!")) | (putStrLn("Is NOT a palindrome :(, try it again!"))).none(io{System.exit(0)}) }