首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Scalaz Kleisli问题

Scalaz Kleisli问题
EN

Stack Overflow用户
提问于 2010-04-01 10:56:37
回答 1查看 1.2K关注 0票数 7

trait库中有一个名为Kleisli黄玉。查看代码:

代码语言:javascript
复制
import scalaz._
import Scalaz._
type StringPair = (String, String)

val f: Int => List[String]        = (i: Int) => List((i |+| 1).toString, (i |+| 2).toString)
val g: String => List[StringPair] = (s: String) => List("X" -> s, s -> "Y")

val k = kleisli(f) >=> kleisli(g) //this gives me a function: Int => List[(String, String)]

调用值为2的函数k提供:

代码语言:javascript
复制
println( k(2) ) //Prints: List((X,3), (3,Y), (X,4), (4,Y))

我的问题是:如何使用Scalaz组合f和g来得到函数m,使m(2)的输出是:

代码语言:javascript
复制
val m = //??? some combination of f and g
println( m(2) ) //Prints: List((X,3), (X,4), (3,Y), (4,Y))

这有可能吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2010-04-01 17:52:20

看来你想要transpose。Scalaz不提供这种功能,但是编写起来应该很容易。您想要的函数mval m = f andThen (_.map(g)) andThen transpose andThen (_.join)

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2559834

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档