Skip to content

Commit

Permalink
Merge pull request #32 from TinkoffCreditSystems/console
Browse files Browse the repository at this point in the history
console typeclass
  • Loading branch information
Odomontois authored Nov 18, 2019
2 parents 96b5c68 + 0ff1717 commit cef28a0
Showing 1 changed file with 26 additions and 0 deletions.
26 changes: 26 additions & 0 deletions core/src/main/scala/tofu/common/Console.scala
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
package tofu.common
import cats.effect.Sync
import cats.tagless.ApplyK

import scala.io.StdIn

trait Console[F[_]] {
def putStr(s: String): F[Unit]
def putStrLn(s: String): F[Unit]

def readStrLn: F[String]
}

object Console {
def putStr[F[_]](s: String)(implicit C: Console[F]): F[Unit] = C.putStr(s)
def putStrLn[F[_]](s: String)(implicit C: Console[F]): F[Unit] = C.putStrLn(s)
def readStrLn[F[_]](implicit C: Console[F]): F[String] = C.readStrLn

implicit val applyKInstance: ApplyK[Console] = cats.tagless.Derive.applyK

implicit def syncInstance[F[_]](implicit F: Sync[F]): Console[F] = new Console[F] {
def putStr(s: String): F[Unit] = F.delay(print(s))
def putStrLn(s: String): F[Unit] = F.delay(println(s))
def readStrLn: F[String] = F.delay(StdIn.readLine())
}
}

0 comments on commit cef28a0

Please sign in to comment.