두 개의 모나드 인 m
과 m'
이 있다고 가정 해 보겠습니다. 이제, 제품 m x m'
과 비슷한 것을 만들 수있는 방법이 있나요, 우리는 변수를 가질"두 모나드의 제품"효과를 얻는 방법?
-- in real problems, the restriction is some subclass MyMonad, so don't worry
-- if it's the case here that mx and f must essentially be pure.
mx :: Monad m'' => m'' a
f :: Monad m'' => a -> m'' b
를 생각? 나는 이것이 Arrows에서 가능하다는 것을 알고 있지만, 특히 mx >>= f
이해야 할 일을 쓰려고 할 때, 더 복잡해 보인다 (불가능할 것 같은)? 내가 동형 수 (mx >>= f) :: ProdM
를 원 mx
에서 어떤 값이 f
에 전달할
(ProdM mx mx') >>= f
{- result 1 -} = mx >>= f
{- result 2 -} = mx' >>= f
을
는data ProdM a = ProdM (m a) (m' a)
instance Monad ProdM where
return x = ProdM (return x) (return x)
을 정의하고이를 보려면하지만 우리는 mx >>= f
를 정의 할 때 지금, 그것은 분명하지 않다 ((mx >>= f) :: m) x ((mx >>= f) :: m')
.
ehird의 해법은 또한 동작 f가 두 번 실행된다는 것을 의미합니다. 모나드 m과 m '이 부작용을 관찰 할 수 있다면 이것은 예상치 못한 결과 일 수 있습니다. – Lemming