# HG changeset patch # User Yasutaka Higa # Date 1422846092 -32400 # Node ID f2187ad63791b337aa25e2f8506eb0bb6795089a # Parent 53cb21845dea9f9bfe1d8aed7d60eaadeb752874 ReDefine DeltaM-mu in Haskell diff -r 53cb21845dea -r f2187ad63791 delta.hs --- a/delta.hs Mon Feb 02 11:54:23 2015 +0900 +++ b/delta.hs Mon Feb 02 12:01:32 2015 +0900 @@ -95,6 +95,9 @@ -- DeltaM utils +unDeltaM :: DeltaM m a -> Delta (m a) +unDeltaM (DeltaM d) = d + headDeltaM :: DeltaM m a -> m a headDeltaM (DeltaM d) = headDelta d @@ -125,9 +128,9 @@ mu' :: (Functor m, Monad m) => DeltaM m (DeltaM m a) -> DeltaM m a -mu' (DeltaM (Mono x)) = DeltaM $ Mono $ (>>= id) $ fmap headDeltaM x -mu' (DeltaM (Delta x d)) = appendDeltaM (mu' $ DeltaM $ Mono x) - (mu' $ fmap tailDeltaM $ DeltaM d ) +mu' d@(DeltaM (Mono _)) = DeltaM $ Mono $ (>>= id) $ fmap headDeltaM $ headDeltaM d +mu' d@(DeltaM (Delta _ _)) = DeltaM $ Delta ((>>= id) $ fmap headDeltaM $ headDeltaM d) + (unDeltaM (mu' (fmap tailDeltaM (tailDeltaM d)))) instance (Functor m, Monad m) => Monad (DeltaM m) where return x = DeltaM $ Mono $ return x