Hello community,
here is the log from the commit of package ghc-monad-skeleton for
openSUSE:Factory checked in at 2017-08-31 20:57:23
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/ghc-monad-skeleton (Old)
and /work/SRC/openSUSE:Factory/.ghc-monad-skeleton.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "ghc-monad-skeleton"
Thu Aug 31 20:57:23 2017 rev:3 rq:513434 version:0.1.4
Changes:
--------
--- /work/SRC/openSUSE:Factory/ghc-monad-skeleton/ghc-monad-skeleton.changes
2017-04-14 13:38:33.004361556 +0200
+++
/work/SRC/openSUSE:Factory/.ghc-monad-skeleton.new/ghc-monad-skeleton.changes
2017-08-31 20:57:23.707562708 +0200
@@ -1,0 +2,5 @@
+Thu Jul 27 14:07:44 UTC 2017 - [email protected]
+
+- Update to version 0.1.4.
+
+-------------------------------------------------------------------
Old:
----
monad-skeleton-0.1.3.2.tar.gz
New:
----
monad-skeleton-0.1.4.tar.gz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ ghc-monad-skeleton.spec ++++++
--- /var/tmp/diff_new_pack.DDUSwW/_old 2017-08-31 20:57:24.399465493 +0200
+++ /var/tmp/diff_new_pack.DDUSwW/_new 2017-08-31 20:57:24.407464369 +0200
@@ -18,7 +18,7 @@
%global pkg_name monad-skeleton
Name: ghc-%{pkg_name}
-Version: 0.1.3.2
+Version: 0.1.4
Release: 0
Summary: Monads of program skeleta
License: BSD-3-Clause
++++++ monad-skeleton-0.1.3.2.tar.gz -> monad-skeleton-0.1.4.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/monad-skeleton-0.1.3.2/README.md
new/monad-skeleton-0.1.4/README.md
--- old/monad-skeleton-0.1.3.2/README.md 2017-03-16 06:48:35.000000000
+0100
+++ new/monad-skeleton-0.1.4/README.md 2017-07-19 08:00:41.000000000 +0200
@@ -23,7 +23,7 @@
```haskell
data Interaction x where
- Get :: Interacton String
+ Get :: Interaction String
Put :: String -> Interaction ()
echo :: Skeleton Interaction ()
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/monad-skeleton-0.1.3.2/monad-skeleton.cabal
new/monad-skeleton-0.1.4/monad-skeleton.cabal
--- old/monad-skeleton-0.1.3.2/monad-skeleton.cabal 2017-03-16
08:21:29.000000000 +0100
+++ new/monad-skeleton-0.1.4/monad-skeleton.cabal 2017-07-19
07:58:22.000000000 +0200
@@ -1,5 +1,5 @@
name: monad-skeleton
-version: 0.1.3.2
+version: 0.1.4
synopsis: Monads of program skeleta
description: Fast operational monad library
homepage: https://github.com/fumieval/monad-skeleton
@@ -26,6 +26,7 @@
exposed-modules: Control.Monad.Skeleton
, Control.Monad.Skeleton.Internal
, Control.Monad.Zombie
+ , Control.Monad.Zombie.Internal
build-depends: base == 4.*
hs-source-dirs: src
ghc-options: -Wall
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/monad-skeleton-0.1.3.2/src/Control/Monad/Skeleton/Internal.hs
new/monad-skeleton-0.1.4/src/Control/Monad/Skeleton/Internal.hs
--- old/monad-skeleton-0.1.3.2/src/Control/Monad/Skeleton/Internal.hs
2017-03-16 08:17:20.000000000 +0100
+++ new/monad-skeleton-0.1.4/src/Control/Monad/Skeleton/Internal.hs
2017-07-19 07:57:50.000000000 +0200
@@ -2,18 +2,15 @@
module Control.Monad.Skeleton.Internal (Cat(..), transCat, (|>), viewL,
transKleisli) where
import Control.Arrow
-import Control.Category
import Unsafe.Coerce
data Cat k a b where
- Empty :: Cat k a a
Leaf :: k a b -> Cat k a b
Tree :: Cat k a b -> Cat k b c -> Cat k a c
transCat :: (forall x y. j x y -> k x y) -> Cat j a b -> Cat k a b
transCat f (Tree a b) = transCat f a `Tree` transCat f b
transCat f (Leaf k) = Leaf (f k)
-transCat _ Empty = Empty
{-# INLINE transCat #-}
(|>) :: Cat k a b -> k b c -> Cat k a c
@@ -21,23 +18,15 @@
{-# INLINE (|>) #-}
viewL :: forall k a b r. Cat k a b
- -> ((a ~ b) => r)
+ -> (k a b -> r)
-> (forall x. k a x -> Cat k x b -> r)
-> r
-viewL Empty e _ = e
-viewL (Leaf k) _ r = k `r` Empty
+viewL (Leaf k) e _ = e k
viewL (Tree a b) e r = go a b where
go :: Cat k a x -> Cat k x b -> r
- go Empty t = viewL t e r
go (Leaf k) t = r k t
go (Tree c d) t = go c (Tree d t)
-instance Category (Cat k) where
- id = Empty
- {-# INLINE id #-}
- (.) = flip Tree
- {-# INLINE (.) #-}
-
transKleisli :: (m b -> n b) -> Kleisli m a b -> Kleisli n a b
transKleisli f = unsafeCoerce (f Prelude..)
{-# INLINE transKleisli #-}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/monad-skeleton-0.1.3.2/src/Control/Monad/Skeleton.hs
new/monad-skeleton-0.1.4/src/Control/Monad/Skeleton.hs
--- old/monad-skeleton-0.1.3.2/src/Control/Monad/Skeleton.hs 2017-03-16
08:17:17.000000000 +0100
+++ new/monad-skeleton-0.1.4/src/Control/Monad/Skeleton.hs 2017-07-19
07:57:50.000000000 +0200
@@ -8,9 +8,6 @@
, unbone
, boned
, hoistSkeleton
- -- * internal
- , Spine(..)
- , graftSpine
) where
import Control.Arrow
import Control.Applicative
@@ -21,16 +18,18 @@
-- | Re-add a bone.
boned :: MonadView t (Skeleton t) a -> Skeleton t a
-boned t = Skeleton (Spine t id)
+boned (Return a) = ReturnS a
+boned (t :>>= k) = BindS t $ Leaf $ Kleisli k
{-# INLINE boned #-}
-- | Pick a bone from a 'Skeleton'.
debone :: Skeleton t a -> MonadView t (Skeleton t) a
-debone (Skeleton (Spine v c)) = case v of
- Return a -> viewL c (Return a) $ \(Kleisli k) c' -> case k a of
- Skeleton s -> debone $ Skeleton $ graftSpine c' s
- t :>>= k -> t :>>= \a -> case k a of
- Skeleton s -> Skeleton (graftSpine c s)
+debone (ReturnS a) = Return a
+debone (BindS t c0) = t :>>= go c0 where
+ go :: Cat (Kleisli (Skeleton t)) a b -> a -> Skeleton t b
+ go c a = viewL c (\(Kleisli k) -> k a) $ \(Kleisli k) c' -> case k a of
+ ReturnS b -> go c' b
+ BindS t' c'' -> BindS t' (Tree c'' c')
-- | Uncommon synonym for 'debone'.
unbone :: Skeleton t a -> MonadView t (Skeleton t) a
@@ -40,15 +39,15 @@
-- | A skeleton that has only one bone.
bone :: t a -> Skeleton t a
-bone t = Skeleton (Spine (t :>>= return) id)
+bone t = BindS t $ Leaf $ Kleisli ReturnS
{-# INLINABLE bone #-}
-- | Lift a transformation between bones into transformation between skeletons.
hoistSkeleton :: forall s t a. (forall x. s x -> t x) -> Skeleton s a ->
Skeleton t a
hoistSkeleton f = go where
go :: forall x. Skeleton s x -> Skeleton t x
- go (Skeleton (Spine v c)) = Skeleton $ Spine (hoistMV f go v)
- (transCat (transKleisli go) c)
+ go (ReturnS a) = ReturnS a
+ go (BindS t c) = BindS (f t) $ transCat (transKleisli go) c
{-# INLINE hoistSkeleton #-}
-- | A deconstructed action
@@ -76,19 +75,12 @@
Return a -> return a
{-# INLINE iterMV #-}
--- | The spine of skeleta.
-data Spine t m a where
- Spine :: MonadView t m a -> Cat (Kleisli m) a b -> Spine t m b
-
--- | Extend a spine.
-graftSpine :: Cat (Kleisli m) a b -> Spine t m a -> Spine t m b
-graftSpine c (Spine v d) = Spine v (c . d)
-{-# INLINE graftSpine #-}
-
-- | @'Skeleton' t@ is a monadic skeleton (operational monad) made out of 't'.
-- Skeletons can be fleshed out by getting transformed to other monads.
-- It provides O(1) ('>>=') and 'debone', the monadic reflection.
-newtype Skeleton t a = Skeleton { unSkeleton :: Spine t (Skeleton t) a }
+data Skeleton t a where
+ ReturnS :: a -> Skeleton t a
+ BindS :: t a -> Cat (Kleisli (Skeleton t)) a b -> Skeleton t b
instance Functor (Skeleton t) where
fmap = liftM
@@ -104,5 +96,6 @@
a <* b = a >>= \x -> b >> return x
instance Monad (Skeleton t) where
- return a = Skeleton $ Spine (Return a) id
- Skeleton (Spine t c) >>= k = Skeleton $ Spine t (c |> Kleisli k)
+ return = ReturnS
+ ReturnS a >>= k = k a
+ BindS t c >>= k = BindS t (c |> Kleisli k)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/monad-skeleton-0.1.3.2/src/Control/Monad/Zombie/Internal.hs
new/monad-skeleton-0.1.4/src/Control/Monad/Zombie/Internal.hs
--- old/monad-skeleton-0.1.3.2/src/Control/Monad/Zombie/Internal.hs
1970-01-01 01:00:00.000000000 +0100
+++ new/monad-skeleton-0.1.4/src/Control/Monad/Zombie/Internal.hs
2017-07-19 07:57:50.000000000 +0200
@@ -0,0 +1,37 @@
+{-# LANGUAGE PolyKinds, GADTs, Rank2Types, ScopedTypeVariables, Trustworthy #-}
+module Control.Monad.Zombie.Internal (Cat(..), transCat, (|>), viewL) where
+
+import Control.Category
+
+data Cat k a b where
+ Empty :: Cat k a a
+ Leaf :: k a b -> Cat k a b
+ Tree :: Cat k a b -> Cat k b c -> Cat k a c
+
+transCat :: (forall x y. j x y -> k x y) -> Cat j a b -> Cat k a b
+transCat f (Tree a b) = transCat f a `Tree` transCat f b
+transCat f (Leaf k) = Leaf (f k)
+transCat _ Empty = Empty
+{-# INLINE transCat #-}
+
+(|>) :: Cat k a b -> k b c -> Cat k a c
+s |> k = Tree s (Leaf k)
+{-# INLINE (|>) #-}
+
+viewL :: forall k a b r. Cat k a b
+ -> ((a ~ b) => r)
+ -> (forall x. k a x -> Cat k x b -> r)
+ -> r
+viewL Empty e _ = e
+viewL (Leaf k) _ r = k `r` Empty
+viewL (Tree a b) e r = go a b where
+ go :: Cat k a x -> Cat k x b -> r
+ go Empty t = viewL t e r
+ go (Leaf k) t = r k t
+ go (Tree c d) t = go c (Tree d t)
+
+instance Category (Cat k) where
+ id = Empty
+ {-# INLINE id #-}
+ (.) = flip Tree
+ {-# INLINE (.) #-}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/monad-skeleton-0.1.3.2/src/Control/Monad/Zombie.hs
new/monad-skeleton-0.1.4/src/Control/Monad/Zombie.hs
--- old/monad-skeleton-0.1.3.2/src/Control/Monad/Zombie.hs 2017-03-16
08:18:14.000000000 +0100
+++ new/monad-skeleton-0.1.4/src/Control/Monad/Zombie.hs 2017-07-19
07:55:25.000000000 +0200
@@ -1,13 +1,23 @@
-{-# LANGUAGE Rank2Types, ScopedTypeVariables #-}
+{-# LANGUAGE Rank2Types, ScopedTypeVariables, GADTs #-}
module Control.Monad.Zombie where
import Control.Applicative
import Control.Arrow
import Control.Category
import Control.Monad
import Control.Monad.Skeleton
-import Control.Monad.Skeleton.Internal
+import Control.Monad.Skeleton.Internal (transKleisli)
+import Control.Monad.Zombie.Internal
import Prelude hiding (id, (.))
+-- | The spine of skeleta.
+data Spine t m a where
+ Spine :: MonadView t m a -> Cat (Kleisli m) a b -> Spine t m b
+
+-- | Extend a spine.
+graftSpine :: Cat (Kleisli m) a b -> Spine t m a -> Spine t m b
+graftSpine c (Spine v d) = Spine v (Tree d c)
+{-# INLINE graftSpine #-}
+
-- | 'Zombie' is a variant of 'Skeleton' which has an 'Alternative' instance.
newtype Zombie t a = Zombie { unZombie :: [Spine t (Zombie t) a] }