我对一个类型进行了有效的异步操作,比如说,
effectful :: Aff e r
我想构建一个采取一些异步操作的操作,并将结果从purescript-signal发送到Channel
。 send
函数具有签名:
send :: forall a e. Channel a -> a -> Eff (channel :: CHANNEL | e) Unit
以下是我提出的实施方案:
runAffToChannel :: forall a e. Channel a
-> Aff e a
-> Eff (channel :: CHANNEL | e) Unit
runAffToChannel chan = runAff_ $ either ignore $ send chan
where
ignore = const (pure unit)
e
和channel :: CHANNEL | e
之间的类型不统一。
如何将Aff e a
类型的值转换为Aff (channel :: CHANNEL | e) a
,或至少Eff e a
转换为Eff (channel :: CHANNEL | e) a
?
答案 0 :(得分:2)
使用效果行时,通常最好在任何地方使用相同的行,即使效果不是必需的"在每个地方。因此,在这种情况下,Aff
参数的类型也应包括channel
:
runAffToChannel :: forall a e. Channel a
-> Aff (channel :: CHANNEL | e) a
-> Eff (channel :: CHANNEL | e) Unit
使用像这样的效果行可能看起来不太合适(并且有点不幸,因为它使行和#34;比他们需要在某些地方更宽),但它可以节省很多痛苦使行全部排成一行。