mirror of
https://github.com/fluencelabs/hackethberlin
synced 2025-04-24 17:02:18 +00:00
Returns and assignments are lifted Free
This commit is contained in:
parent
9c222f1013
commit
9c2f0fe72c
@ -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 {
|
||||
|
@ -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
|
||||
|
Loading…
x
Reference in New Issue
Block a user