diff --git a/src/main/scala/fluence/hackethberlin/Expr.scala b/src/main/scala/fluence/hackethberlin/Expr.scala index 194fb8d..c468e00 100644 --- a/src/main/scala/fluence/hackethberlin/Expr.scala +++ b/src/main/scala/fluence/hackethberlin/Expr.scala @@ -1,5 +1,6 @@ package fluence.hackethberlin +import cats.free.Free import types._ sealed trait Expr[T] { @@ -9,9 +10,10 @@ sealed trait Expr[T] { } sealed trait InlineExpr[T <: types.Type] extends Expr[T] { - def toReturn: Expr.Return[T] = Expr.Return[T](this) + def toReturn: Free[Expr, T] = Free liftF Expr.Return[T](this) - def :=:(name: Symbol): Expr[Expr.Ref[T]] = Expr.Assign[T](Expr.Ref[T](name.name, boxedValue), this) + def :=:(name: Symbol): Free[Expr, Expr.Ref[T]] = + Free.liftF[Expr, Expr.Ref[T]](Expr.Assign[T](Expr.Ref[T](name.name, boxedValue), this)) } object Expr { diff --git a/src/main/scala/fluence/hackethberlin/MakeVyperApp.scala b/src/main/scala/fluence/hackethberlin/MakeVyperApp.scala index 5c739c9..a7fa284 100644 --- a/src/main/scala/fluence/hackethberlin/MakeVyperApp.scala +++ b/src/main/scala/fluence/hackethberlin/MakeVyperApp.scala @@ -28,7 +28,7 @@ object MakeVyperApp extends App { "myFunc", ('addr ->> address) :: HNil, address - )(args ⇒ Free.liftF(args.ref('addr).toReturn)) + )(args ⇒ args.ref('addr).toReturn) val recordStruct = ProductType( ('record_address ->> address) :: ('other_some ->> uint256) :: HNil @@ -51,9 +51,9 @@ object MakeVyperApp extends App { `@public` @: sumArgs.funcDef("sum", uint256) { args ⇒ for { - c ← Free.liftF('c :=: `++`(args.ref('a), args.ref('b))) - d ← Free.liftF('d :=: `++`(args.ref('b), c)) - sum ← Free.liftF[Expr, uint256.type](`++`(args.ref('a), d).toReturn) + c ← 'c :=: `++`(args.ref('a), args.ref('b)) + d ← 'd :=: `++`(args.ref('b), c) + sum ← `++`(args.ref('a), d).toReturn } yield sum } ).toVyper