packages feed

data-fresh 0.2013.250.1 → 0.2013.251.0

raw patch · 3 files changed

+39/−12 lines, 3 filesPVP: major bump suggested

API removals or changes: PVP suggests a major version bump

API changes (from Hackage documentation)

- Control.Monad.Trans.Fresh.Delta: Triplet :: a -> a -> a -> Triplet a
- Control.Monad.Trans.Fresh.Delta: data Triplet a
- Control.Monad.Trans.Fresh.Delta: integerDelta :: Integer -> Cofree Triplet Integer
+ Control.Monad.Trans.Fresh.Delta: integerPairDelta :: (Integer, Integer) -> Cofree Triplet (Integer, Integer)
+ Data.Triplet: Triplet :: a -> a -> a -> Triplet a
+ Data.Triplet: data Triplet a
+ Data.Triplet: instance Applicative Triplet
+ Data.Triplet: instance Eq a => Eq (Triplet a)
+ Data.Triplet: instance Foldable Triplet
+ Data.Triplet: instance Functor Triplet
+ Data.Triplet: instance Read a => Read (Triplet a)
+ Data.Triplet: instance Show a => Show (Triplet a)
+ Data.Triplet: instance Traversable Triplet

Files

data-fresh.cabal view
@@ -1,12 +1,12 @@ name:               data-fresh-version:            0.2013.250.1+version:            0.2013.251.0 stability:          experimental category:           Control synopsis:           Interface and functor transformers for fresh values description:-    A simple library, mostly containing of an interface to generate fresh values.+    A simple library, which contains an interface for generating fresh values.     .-    This package also includes two functor transformers which implement this+    This library also includes two functor transformers which implement this     interface. They consume fresh values from user-supplied comonads.     Currently, two approaches are implemented:     .@@ -35,6 +35,7 @@         Control.Monad.Trans.Fresh.Delta         Control.Monad.Trans.Fresh.Stream         Data.Fresh+        Data.Triplet     build-depends:         base >= 4 && < 5,         free -any,
src/Control/Monad/Trans/Fresh/Delta.hs view
@@ -4,12 +4,12 @@ module Control.Monad.Trans.Fresh.Delta where  import Control.Applicative-import Control.Arrow (first)+import Control.Arrow (first, second) import Control.Comonad.Cofree import Control.Monad.Trans.Class+import Data.Bits import Data.Fresh--data Triplet a = Triplet a a a+import Data.Triplet  newtype FreshT v m a = FreshT     { runFreshT :: Cofree Triplet v -> m (a, Cofree Triplet v) }@@ -28,9 +28,13 @@         mm = sukk tt         (ll, rr) = splt tt --- | A delta of integers.-integerDelta :: Integer -> Cofree Triplet Integer-integerDelta n = seedDelta n succ (\m -> let m' = 2 * m in (m', m' + 1))+-- | A delta of integer pairs.+integerPairDelta :: (Integer, Integer) -> Cofree Triplet (Integer, Integer)+integerPairDelta n = seedDelta n sukk splt+  where+    sukk = second succ+    splt (m, _) = let m' = m `shiftL` 1+                  in ((m', 0), (m' .|. 1, 0))  instance Functor m => Functor (FreshT v m) where     fmap f (FreshT xx) = FreshT $ \s -> fmap (first f) (xx s)@@ -42,10 +46,10 @@  instance Monad m => Monad (FreshT v m) where     return x = FreshT $ \s -> return (x, s)-    FreshT aa >>= f = FreshT $ \s -> do-        (a, s1) <- aa s+    FreshT aa >>= f = FreshT $ \(_ :< Triplet l _ r) -> do+        (a, _) <- aa l         let FreshT ff = f a-        ff s1+        ff r  -- TODO Alternative, MonadPlus -- TODO MonadFix
+ src/Data/Triplet.hs view
@@ -0,0 +1,22 @@+module Data.Triplet where++import Control.Applicative+import Data.Foldable+import Data.Monoid+import Data.Traversable++data Triplet a = Triplet a a a+    deriving (Eq, Read, Show)++instance Functor Triplet where+    fmap f (Triplet l m r) = Triplet (f l) (f m) (f r)++instance Applicative Triplet where+    pure x = Triplet x x x+    Triplet fl fm fr <*> Triplet xl xm xr = Triplet (fl xl) (fm xm) (fr xr)++instance Foldable Triplet where+    foldMap f (Triplet l m r) = mconcat . map f $ [l, m, r]++instance Traversable Triplet where+    sequenceA (Triplet l m r) = Triplet <$> l <*> m <*> r