Skip to content

Limitation is not in README #2

@hiroshi-cl

Description

@hiroshi-cl

Thank you for your smart and interesting implementation, which uses context abstraction, Project Loom's coroutines and no CPS transformation.

However, there is a point which concerns me.
Some type of monads, such as list monad, does not work well, since a coroutine can simulate only an "affine" delimited continuation, which can be used at most once.

An example using Scalaz follows:

    val list: List[Int] = reify [List] in {
      val l = List(1, 2, 3).flatMap(x => List(x + 5)).reflect
      val k = List(2, 3, 4).reflect
      l * k
    }

    println(list)
[error] (run-main-0) java.lang.IllegalStateException: Continuation terminated
[error] java.lang.IllegalStateException: Continuation terminated
[error] 	at java.base/java.lang.Continuation.run(Continuation.java:286)
[error] 	at monadic.Coroutine.resume(Coroutine.scala:19)
[error] 	at monadic.Monadic.step$1(Monadic.scala:49)
[error] 	at monadic.Monadic.run$2$$anonfun$1(Monadic.scala:61)
[error] 	at monadic.ScalazMonadic.sequence$$anonfun$2$$anonfun$1(examples.scala:14)
...

Would you write this limitation in README?
Thank you.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions