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
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions