Skip to content

Commit 8c3e696

Browse files
Fix inferring effectful while header (#902)
Should fix #601
1 parent 3321209 commit 8c3e696

File tree

3 files changed

+20
-1
lines changed

3 files changed

+20
-1
lines changed

effekt/shared/src/main/scala/effekt/Typer.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -119,7 +119,7 @@ object Typer extends Phase[NameResolved, Typechecked] {
119119
checkStmt(s, expectedType)
120120
}.getOrElse(Result(TUnit, ConcreteEffects.empty))
121121

122-
Result(Context.join(bodyTpe, defaultTpe), defaultEffs ++ bodyEffs)
122+
Result(Context.join(bodyTpe, defaultTpe), defaultEffs ++ bodyEffs ++ guardEffs)
123123

124124
case source.Var(id) => id.symbol match {
125125
case x: RefBinder => Context.lookup(x) match {
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
[error] examples/neg/typer/infer-effectful-while.effekt:14:1: Main cannot have effects, but includes effects: { Foo }
2+
def main() = {
3+
^
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
interface Foo { def foo(): Unit }
2+
3+
def bar(): Bool / Foo = {
4+
do foo()
5+
false
6+
}
7+
8+
def fooo() = {
9+
while(bar() is true) {
10+
()
11+
}
12+
}
13+
14+
def main() = {
15+
fooo()
16+
}

0 commit comments

Comments
 (0)