packages feed

data-fix 0.3.1 → 0.3.2

raw patch · 3 files changed

+89/−7 lines, 3 filesdep ~basedep ~deepseqdep ~hashablenew-uploaderPVP ok

version bump matches the API change (PVP)

Dependency ranges changed: base, deepseq, hashable, transformers, transformers-compat

API changes (from Hackage documentation)

+ Data.Fix: unwrapFix :: Fix f -> f (Fix f)
+ Data.Fix: unwrapMu :: Functor f => Mu f -> f (Mu f)
+ Data.Fix: unwrapNu :: Functor f => Nu f -> f (Nu f)
+ Data.Fix: wrapFix :: f (Fix f) -> Fix f
+ Data.Fix: wrapMu :: Functor f => f (Mu f) -> Mu f
+ Data.Fix: wrapNu :: Functor f => f (Nu f) -> Nu f

Files

CHANGELOG.md view
@@ -1,3 +1,12 @@+## 0.3.2++- Add `(un)wrapFix/Mu/Nu`+- Support `transformers-0.6`++## 0.3.1++- Update bounds for GHC-9.0+ ## 0.3.0  - Rename `cata`, `ana` and `hylo` into `foldFix`, `unfoldFix` and `refold.
data-fix.cabal view
@@ -1,5 +1,5 @@ Name:            data-fix-Version:         0.3.1+Version:         0.3.2 Cabal-Version:   >= 1.10 License:         BSD3 License-file:    LICENSE@@ -29,8 +29,9 @@    || ==8.2.2    || ==8.4.4    || ==8.6.5-   || ==8.8.3-   || ==8.10.1+   || ==8.8.4+   || ==8.10.4+   || ==9.0.1  extra-source-files:   CHANGELOG.md@@ -64,5 +65,5 @@    if !impl(ghc >=8.0)     build-depends:-        transformers         >=0.3   && <0.6-      , transformers-compat  >=0.6.5 && <0.7+        transformers         >=0.3   && <0.7+      , transformers-compat  >=0.6.5 && <0.8
src/Data/Fix.hs view
@@ -57,16 +57,22 @@     hoistFix',     foldFix,     unfoldFix,+    wrapFix,+    unwrapFix,     -- * Mu - least fixed point     Mu (..),     hoistMu,     foldMu,     unfoldMu,+    wrapMu,+    unwrapMu,     -- * Nu - greatest fixed point     Nu (..),     hoistNu,     foldNu,     unfoldNu,+    wrapNu,+    unwrapNu,     -- * Refolding     refold,     -- * Monadic variants@@ -84,7 +90,7 @@ import Prelude (Eq (..), Functor (..), Monad (..), Ord (..), Read (..), Show (..), showParen, showString, ($), (.), (=<<))  #ifdef __GLASGOW_HASKELL__-#if! HAS_POLY_TYPEABLE+#if !HAS_POLY_TYPEABLE import Prelude (const, error, undefined) #endif #endif@@ -110,7 +116,7 @@  -- $setup -- >>> :set -XDeriveFunctor--- >>> import Prelude (showChar, Int, Num (..))+-- >>> import Prelude -- >>> import Data.Functor.Classes -- >>> data ListF a b = Nil | Cons a b deriving (Show, Functor) --@@ -158,6 +164,28 @@ unfoldFix :: Functor f => (a -> f a) -> a -> Fix f unfoldFix f = go where go = Fix . fmap go . f +-- | Wrap 'Fix'.+--+-- >>> let x = unfoldFix (\i -> if i < 3 then Cons i (i + 1) else Nil) (0 :: Int)+-- >>> wrapFix (Cons 10 x)+-- Fix (Cons 10 (Fix (Cons 0 (Fix (Cons 1 (Fix (Cons 2 (Fix Nil))))))))+--+-- @since 0.3.2+--+wrapFix :: f (Fix f) -> Fix f+wrapFix = Fix++-- | Unwrap 'Fix'.+--+-- >>> let x = unfoldFix (\i -> if i < 3 then Cons i (i + 1) else Nil) (0 :: Int)+-- >>> unwrapFix x+-- Cons 0 (Fix (Cons 1 (Fix (Cons 2 (Fix Nil)))))+--+-- @since 0.3.2+--+unwrapFix :: Fix f -> f (Fix f)+unwrapFix = unFix+ ------------------------------------------------------------------------------- -- Functor instances -------------------------------------------------------------------------------@@ -275,6 +303,28 @@ unfoldMu :: Functor f => (a -> f a) -> a -> Mu f unfoldMu f x = Mu $ \mk -> refold mk f x +-- | Wrap 'Mu'.+--+-- >>> let x = unfoldMu (\i -> if i < 3 then Cons i (i + 1) else Nil) (0 :: Int)+-- >>> wrapMu (Cons 10 x)+-- unfoldMu unFix (Fix (Cons 10 (Fix (Cons 0 (Fix (Cons 1 (Fix (Cons 2 (Fix Nil)))))))))+--+-- @since 0.3.2+--+wrapMu :: Functor f => f (Mu f) -> Mu f+wrapMu fx = Mu $ \f -> f (fmap (foldMu f) fx)++-- | Unwrap 'Mu'.+--+-- >>> let x = unfoldMu (\i -> if i < 3 then Cons i (i + 1) else Nil) (0 :: Int)+-- >>> unwrapMu x+-- Cons 0 (unfoldMu unFix (Fix (Cons 1 (Fix (Cons 2 (Fix Nil))))))+--+-- @since 0.3.2+--+unwrapMu :: Functor f => Mu f -> f (Mu f)+unwrapMu = foldMu (fmap wrapMu)+ ------------------------------------------------------------------------------- -- Nu -------------------------------------------------------------------------------@@ -319,6 +369,28 @@ -- unfoldNu unFix (Fix (Cons 0 (Fix (Cons 1 (Fix (Cons 2 (Fix (Cons 3 (Fix Nil))))))))) unfoldNu :: (a -> f a) -> a -> Nu f unfoldNu = Nu++-- | Wrap 'Nu'.+--+-- >>> let x = unfoldNu (\i -> if i < 3 then Cons i (i + 1) else Nil) (0 :: Int)+-- >>> wrapNu (Cons 10 x)+-- unfoldNu unFix (Fix (Cons 10 (Fix (Cons 0 (Fix (Cons 1 (Fix (Cons 2 (Fix Nil)))))))))+--+-- @since 0.3.2+--+wrapNu :: Functor f => f (Nu f) -> Nu f+wrapNu = unfoldNu (fmap unwrapNu)++-- | Unwrap 'Nu'.+--+-- >>> let x = unfoldNu (\i -> if i < 3 then Cons i (i + 1) else Nil) (0 :: Int)+-- >>> unwrapNu x+-- Cons 0 (unfoldNu unFix (Fix (Cons 1 (Fix (Cons 2 (Fix Nil))))))+--+-- @since 0.3.2+--+unwrapNu :: Functor f => Nu f -> f (Nu f)+unwrapNu (Nu f x) = fmap (Nu f) (f x)  ------------------------------------------------------------------------------- -- refold