(PureScript)如何创建两个单独定义的效果行的联合

时间:2017-07-06 17:26:49

标签: purescript set-union

我基本上需要知道如何编写这样的函数......

78.95

哪个不起作用。我收到这个错误:

  

[PureScript]无法匹配

77.0
     

善良

80.99

更具体地说,我要做的是组合两个用户提供的功能阵列。这是代码库的一部分(用户提供)返回102.95,另一部分(也是用户提供的)返回and (column and column)。在应用程序的入口点(用户无法访问的“核心”),这两组需要组合才能一起运行。实际上,我正在尝试编写price类型的函数,其中VARCHAR统一了CHANGED TO Decimal(10,2)joinCommands :: forall e1 e2 e3 . Union e1 e2 e3 => Eff e1 Unit -> Eff e2 Unit -> Eff e3 Unit joinCommands fn1 fn2 = do fn1 fn2 的所有效果。

1 个答案:

答案 0 :(得分:0)

我明白了。对于一般情况,我只需要具体说明每个Eff都有一个相互兼容的类型(不一定相同)。

joinCommands :: forall e. Eff e Unit -> Eff e Unit -> Eff e Unit
joinCommands fn1 fn2 = do
  fn1
  fn2

对于具体案例,答案是一样的。函数签名为forall e. Array (Eff e Unit) -> Array (Eff e Unit) -> Array (Eff e Unit),编译器可以确定第一组Eff与第二组兼容。

所以,如果你有......

type Commands e = Array (Eff e Unit)
a :: forall e. Commands (random :: RANDOM | e)
a = []

b :: forall e. Commands (now :: NOW | e)
b = []

c :: forall e. Commands e -> Commands e -> Commands e
c = a <> b

...即使c a ba两者都有不同的明显效果,您也可以致电b