问题标签 [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.

0 投票
1 回答
1170 浏览

scala - 我可以使用 monad 转换器来简化这个组合吗?

假设我有

我想得到类型的结果,VS[Option[B]]但如果v是 a Success(None),结果也应该是 a Success(None)。这是一个例子:

然后:

成功案例是:

空壳是:

有没有“更好”的方式来做到这一点(可能涉及 kleisli 组合或单子变换器)?

0 投票
1 回答
705 浏览

haskell - 将 Kleisli 箭头提升到 IO?

如果我有以下两个 Kleisli 箭头:

我希望能够写出类似的东西:

这当然行不通,因为String不匹配IO String. 另一方面,可以同时定义stdoutProcessA和定义writeToFileAtype Kleisli IO ...,但是我将无法用 type 的箭头组合它们Kleisli Maybe ...,这是我需要的其他事情。

我对箭头还不是很有经验,所以我可能遗漏了一些明显的东西。如何进行上述操作?

0 投票
4 回答
3186 浏览

haskell - 如何在单子中使用 Kleisli 箭头?

在 HaskellControl.Arrow文档中,它谈到了 Kleisli 箭头与单子的关系,但对我来说如何使用它并不明显。我有一个我认为适合箭头的功能,除了它涉及 IO monad,所以我认为 Kleisli 箭头可能会有所帮助。

采用以下函数,它返回目录的原始文件名和修改后的文件名对。

如果我必须把它画出来,它会是这样的:

在此处输入图像描述

我认为它可以从使用 Kleisli 箭头中受益,但我不知道如何。任何人都可以提供指导吗?

0 投票
0 回答
377 浏览

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 并没有提出任何类似的东西,但我想我会问一下,以防以前有人遇到过这个问题。

0 投票
1 回答
1411 浏览

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)
  • 我们能从这些法则中推导出一元法则吗?这些定律和一元定律等效吗?
0 投票
1 回答
402 浏览

scala - 如何在 Scala 中使用 >=>?

我正在尝试>=>在 Scala 中使用(Kleisli 箭头)。据我了解,它由返回单子的函数组成。现在我尝试如下:

为什么不编译?如何作曲fg搭配>=>

0 投票
1 回答
511 浏览

scala - Kleisli Arrow 与 Scala 中的 Writer。为什么不编译?

这是我之前的问题的后续。看来我还是没明白。现在我正在尝试编写返回Writer monad 的函数。

为什么不编译?

0 投票
1 回答
634 浏览

scala - Kleisli 是函子、应用程序还是单子?

这个问题的灵感来自对我上一个问题的反馈

ScalazKleisli[M[_], A, B]为函数提供包装类A => M[B]

Kleisli[M[_], A, B]是一个半群,如果M[_]是一个半群。假设这M[_]是一个函子。Kleisli也是一个仿函数是否正确?如果M[_]是 applicative 或 monad 怎么办?

0 投票
1 回答
1879 浏览

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吗?

0 投票
1 回答
1818 浏览

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 是ReaderTwith identity monad的一个特化Id
    type Reader[A, B] = ReaderT[Id, A, B].

这只是巧合还是有一些更深层次的原因在 ScalazKleisli中是ReaderTReader构的?