davec
11/04/2020, 3:22 PM0.11.0 (or 1.1.0-SNAPSHOT) is there any migration guide for what has changed (https://arrow-kt.io/docs/next/fx/ is not what I'm looking for, I am looking for a comparison of how things were done in previous releases versus 0.11.0).
Along with that, are there any actual code examples for the 0.11.0 / 1.1.0-SNAPSHOT releases?  Again, I don't want https://arrow-kt.io/docs/next/fx/ as there are no code samples of how to do monad comprehensions, as an example.
For example, take this example from @mattmoore’s blog post https://lambda.show/blog/arrow-io-monad-comprehensions-cleaner-monadic-composition... what's the equivalent syntax of this?
fun getAddressFromOrder(orderId: Int) = IO.fx {
    val order = !getOrder(orderId)
    val customer = !getCustomer(order.customerId)
    val address = !getAddress(customer.addressId)
    address
}simon.vergauwen
11/06/2020, 8:33 AMsuspend fun getAddressFromOrder(orderId: Int) {
    val order = getOrder(orderId)
    val customer = getCustomer(order.customerId)
    val address = getAddress(customer.addressId)
    address
}
Where IO is replaced with suspend. This opens the door to easily combine IO operations with other monads such as either without having to use monad transformers. You can now simply use a Either.fx rebuild as either block, inside suspend which previously ot possible. You'd have to use EitherT<ForIO to achieve similar behavior which has a much steeper learning curve.
Since suspend offers the same guarantees as IO, and thus the same combinators can be implemented we want to promote this since it's much more Kotlin idomatic and offers a way forward for easy FP in Kotlin with a much smaller learning curve.
The link that @PhBastiani shared was the document written to propose suspend over IO, if you're missing some of this information on the Arrow website a PR would be greatly appreciated 🙏simon.vergauwen
11/06/2020, 8:33 AMdavec
11/06/2020, 4:08 PM