2017-10-01 10 views
0

효과의 더 큰 집합을 기대하는 기능을 충족,의 말을하자강제 변환 EFF의 또는 AFF 내가 유형과 effectful 비동기 작업이

effectful :: Aff e r 
좀 비동기 작업을 수행하는 작업을 구축하고자하는

결과를 purescript-signal에서 Channel으로 보냅니다. 여기

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

을 내가 해낸 구현 : :이 send 기능은 서명이

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) 

종류는 echannel :: CHANNEL | e 사이에 여기에 통합하지 않습니다는.

Aff e a의 값을 Aff (channel :: CHANNEL | e) a 또는 적어도 Eff e a에서 Eff (channel :: CHANNEL | e) a으로 변환하려면 어떻게해야합니까?

답변

2

효과 행을 사용할 때 효과가 모든 장소에서 "필수"가 아니더라도 일반적으로 모든 행에서 동일한 행을 사용하는 것이 가장 좋습니다. 이 경우, Aff 인수의 형태도 channel을 포함해야합니다 : 그것은 행 "넓은"보다 만들면서이 같은

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

사용 효과 행이 아주 잘하지를 보인다 (조금 불행한 있습니다 그들은 일부 장소에 있어야 함) 행을 모두 일직선으로 만드는 데 많은 고통을 덜어줍니다.