Skip to content

Commit bf542ad

Browse files
author
rafaparadela
committed
Step 10: Generic F-program
1 parent df0ede5 commit bf542ad

File tree

1 file changed

+21
-8
lines changed

1 file changed

+21
-8
lines changed

src/main/scala/training/Program.scala

Lines changed: 21 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,30 +1,43 @@
11
package training
22

3+
import cats.{Id, Monad}
34
import cats.implicits._
5+
import scala.concurrent.Future
6+
import scala.concurrent.ExecutionContext.Implicits.global
7+
import scala.util.Try
48

5-
object Program extends App {
9+
class MyProgram[F[_]: Monad] extends App {
610

711
case class Account(id: String, balance: Int)
812
case class Statement(isRich: Boolean, accounts: Int)
913

10-
def getBank1Credentials: Option[String] = Some("MyUser_MyPassword")
14+
def getBank1Credentials: F[String] = "MyUser_MyPassword".pure[F]
1115

12-
def getBalanceBank1(credentials: String): Option[Account] = Some(Account("a1", 100))
16+
def getBalanceBank1(credentials: String): F[Account] = Account("a1", 100).pure[F]
1317

14-
def getBalanceBank2: Option[Int] = Some(80)
18+
def getBalanceBank2: F[Int] = 80.pure[F]
1519

1620
val moneyInPocket: Int = 20
1721

18-
def balance: Option[Int] = for {
22+
def balance: F[Int] = for {
1923
c <- getBank1Credentials
2024
b1 <- getBalanceBank1(c).map(_.balance)
2125
b2 <- getBalanceBank2
22-
p <- moneyInPocket.pure[Option]
26+
p <- moneyInPocket.pure[F]
2327
} yield b1 + b2 + p
2428

29+
}
30+
31+
object Program extends App {
32+
33+
type EitherS[A] = Either[String, A]
2534

2635
//EDGE OF THE WORLD
27-
println(balance)
36+
println(new MyProgram[Id].balance)
37+
println(new MyProgram[EitherS].balance)
38+
println(new MyProgram[Option].balance)
39+
println(new MyProgram[Try].balance)
40+
println(new MyProgram[List].balance)
41+
println(new MyProgram[Future].balance)
2842

2943
}
30-

0 commit comments

Comments
 (0)