问题标签 [kleisli]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
scala - 我可以使用 monad 转换器来简化这个组合吗?
假设我有
我想得到类型的结果,VS[Option[B]]
但如果v
是 a Success(None)
,结果也应该是 a Success(None)
。这是一个例子:
然后:
成功案例是:
空壳是:
有没有“更好”的方式来做到这一点(可能涉及 kleisli 组合或单子变换器)?
haskell - 将 Kleisli 箭头提升到 IO?
如果我有以下两个 Kleisli 箭头:
我希望能够写出类似的东西:
这当然行不通,因为String
不匹配IO String
. 另一方面,可以同时定义stdoutProcessA
和定义writeToFileA
type Kleisli IO ...
,但是我将无法用 type 的箭头组合它们Kleisli Maybe ...
,这是我需要的其他事情。
我对箭头还不是很有经验,所以我可能遗漏了一些明显的东西。如何进行上述操作?
haskell - 如何在单子中使用 Kleisli 箭头?
在 HaskellControl.Arrow
文档中,它谈到了 Kleisli 箭头与单子的关系,但对我来说如何使用它并不明显。我有一个我认为适合箭头的功能,除了它涉及 IO monad,所以我认为 Kleisli 箭头可能会有所帮助。
采用以下函数,它返回目录的原始文件名和修改后的文件名对。
如果我必须把它画出来,它会是这样的:
我认为它可以从使用 Kleisli 箭头中受益,但我不知道如何。任何人都可以提供指导吗?
scala - 提升类 Kleisli 函数以将一元值作为参数
我正在为我的域模型编写 ScalaCheck 生成器。为了增加灵活性,我的生成器返回函数采用关联的特定值。例如:
这样,我可以选择生成C
与特定A
. 不过,我通常不在乎模型与什么相关联:我想生成C
带有 any的A
. 在这种情况下,我可以执行以下操作之一:
我喜欢后面的选项,因为我可以将它们包含在更复杂的表达式中,而无需相对繁琐的for
循环。D
但是,对于这种需要多个参数的情况,我想不出任何简单的解决方案。看来我被困在了for
:
底线:
如果有一些干净的语法不仅可以将 Kleisli 箭头和带有n 个参数f: T => M[R]
的“类 Kleisli”函数提升到单子值或. 像这样的东西:g: (T, U) => M[R]
f2: M[T] => M[R]
g2: (M[T], M[U]) => M[R]
我喜欢这种假设方法的原因在于:
- 看起来类似一个未提升的功能应用程序,只是有
liftX
拼接 - 很容易组合成复杂的
genC
表达式genD
我可以写它,但在广阔的Scalaz世界中是否存在这样的东西?如果我对我的多参数函数进行柯里化会有帮助吗?Arrow 组合器会有帮助吗?我一直在浏览 Scalaz 并没有提出任何类似的东西,但我想我会问一下,以防以前有人遇到过这个问题。
scala - 函数组合、Kleisli 箭头和一元定律
阅读本文后,我了解到>=>
(Kleisli 箭头)只是组合函数的高阶函数,它返回“一元值”。例如:
它看起来像是“简单”函数(即返回简单值的纯函数)的简单组合:
现在我猜这个“简单”的构图andThen
符合某些规律
- 身份:
f andThen g == g
以及g andThen f == g
身份功能:f[A](a:A):A = a
- 关联性:
(f1 andThen f2) andThen f3
==f1 andThen (f2 andThen f3)
现在我的问题:
- 是否
>=>
符合那些法律,身份在哪里f(a:A) = M[a].unit(a)
? - 我们能从这些法则中推导出一元法则吗?这些定律和一元定律等效吗?
scala - 如何在 Scala 中使用 >=>?
我正在尝试>=>
在 Scala 中使用(Kleisli 箭头)。据我了解,它由返回单子的函数组成。现在我尝试如下:
为什么不编译?如何作曲f
和g
搭配>=>
?
scala - Kleisli Arrow 与 Scala 中的 Writer。为什么不编译?
这是我之前的问题的后续。看来我还是没明白。现在我正在尝试编写返回Writer monad 的函数。
为什么不编译?
scala - Kleisli 是函子、应用程序还是单子?
这个问题的灵感来自对我上一个问题的反馈
Scalaz
Kleisli[M[_], A, B]
为函数提供包装类A => M[B]
。
Kleisli[M[_], A, B]
是一个半群,如果M[_]
是一个半群。假设这M[_]
是一个函子。Kleisli
也是一个仿函数是否正确?如果M[_]
是 applicative 或 monad 怎么办?
scala - Scalaz Kleisli 使用优势
在scalaz Kleisli[M[_], A, B]
中是 的包装器A => M[B]
,它允许组合这些函数。例如,如果M[_]
是 monad,我可以 composeKleisli[M, A, B]
和Kleisli[M, B, C]
with >=>
to get Kleisli[M, A, C]
。
简而言之,Kleisli
根据andThens
. M
这是对的吗 ?使用还有其他好处Kleisli
吗?
scala - Scalaz 中的 Kleisli、ReaderT 和 Reader 是一样的只是巧合吗?
在斯卡拉兹
Kleisli[F, A, B]
是A => F[B]
.ReaderT[F, A, B]
-- reader monad transformer -- 只是Kleisli[F, A, B]
.Reader[A, B]
monad 是ReaderT
with identity monad的一个特化Id
:
type Reader[A, B] = ReaderT[Id, A, B]
.
这只是巧合还是有一些更深层次的原因在 ScalazKleisli
中是ReaderT
同Reader
构的?