2017-10-01 12 views
0

の大規模なセットを期待して機能を満たすのは言わせ、強制EffのかAFF私はいくつかの非同期アクションを実行するアクションを構築したいと思い、私はタイプと副作用の非同期作用を有する効果

effectful :: Aff e r 

へその結果をpurescript-signalからChannelに送信します。 send機能は、署名を持っている:タイプがechannel :: CHANNEL | eの間、ここで統一していない

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) 

:ここ

send :: forall a e. Channel a -> a -> Eff (channel :: CHANNEL | e) Unit 

は私が思いついた実装です。

Aff e aの値をAff (channel :: CHANNEL | e) aに、またはEff e aEff (channel :: CHANNEL | e) aに変換するにはどうすればよいですか?

答えて

2

エフェクト行を使用する場合は、すべての場所でエフェクトが「必須」でなくても、通常はどこでも同じ行を使用することをお勧めします。したがって、この場合には、Aff引数のタイプあまりにchannelを含める必要があります。それは、彼らよりも行が「広い」作るよう

runAffToChannel :: forall a e. Channel a 
       -> Aff (channel :: CHANNEL | e) a 
       -> Eff (channel :: CHANNEL | e) Unit 

を、このような効果の行を使用するには、かなり右(と少し不幸ではありませんように見えるかもしれませんいくつかの場所にいる必要があります)が、すべての行を整列させることに苦労することはありません。

関連する問題