【问题标题】:How to implement an Eff-like monad without foreign interface如何在没有外部接口的情况下实现类似 Eff 的 monad
【发布时间】:2018-06-14 12:06:26
【问题描述】:

我有兴趣在 PureScript 中实现类似 Freer Monads, more Extensible Effects 的东西,但使用行而不是开放联合(我想这是可能的)。

但是,没有foreign import,我无法定义一种类型。我希望能够做类似的事情:

kind X
data Y :: # X -> Type -> Type

data Z :: X

这是我能做的还是我应该寻找其他方法?

【问题讨论】:

  • 我不明白Log 类型的本意。
  • 它表示记录字符串的效果,稍后将由处理程序给出对此的解释(例如,将所述字符串记录到IO或将其附加到文件)。
  • 如果要将Log 保留在类型行中,则其中不能包含字符串。 PureScript 不是依赖类型的,因此类型不能嵌入值。
  • 好吧,但我怎么说Z 是一种X? (现在将Log 编辑为Z
  • 你说data Z :: X

标签: purescript


【解决方案1】:

Nathan Faubion 有一个可扩展效果的实现,称为 purescript-run,它使用行多态性、变体和代理。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-11-16
    • 2014-11-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-07
    相关资源
    最近更新 更多