some 1.0.0.3 → 1.0.1
raw patch · 7 files changed
+34/−8 lines, 7 filesdep ~base
Dependency ranges changed: base
Files
- ChangeLog.md +5/−0
- some.cabal +1/−1
- src/Data/GADT/Internal.hs +10/−4
- src/Data/Some.hs +1/−0
- src/Data/Some/Church.hs +3/−2
- src/Data/Some/GADT.hs +7/−0
- src/Data/Some/Newtype.hs +7/−1
ChangeLog.md view
@@ -1,3 +1,8 @@+# 1.0.1++- Add 'withSomeM' combinator.+ Allows to workaround: https://gitlab.haskell.org/ghc/ghc/issues/15681+ # 1.0.0.3 - One less `unsafeCoerce` (thanks to David Feuer)
some.cabal view
@@ -1,5 +1,5 @@ name: some-version: 1.0.0.3+version: 1.0.1 stability: provisional cabal-version: >=1.10 build-type: Simple
src/Data/GADT/Internal.hs view
@@ -121,16 +121,16 @@ f (Refl, rest) = return (mkSome Refl, rest) instance (GRead a, GRead b) => GRead (Sum a b) where- greadsPrec d s = concat- [ readParen (d > 10)+ greadsPrec d s =+ readParen (d > 10) (\s1 -> [ (S $ \k -> withSome r (k . InL), t) | ("InL", s2) <- lex s1 , (r, t) <- greadsPrec 11 s2 ]) s- , readParen (d > 10)+ +++ readParen (d > 10) (\s1 -> [ (S $ \k -> withSome r (k . InR), t) | ("InR", s2) <- lex s1 , (r, t) <- greadsPrec 11 s2 ]) s- ] ------------------------------------------------------------------------------- -- GEq@@ -363,6 +363,12 @@ -- | Traverse over argument. traverseSome :: Functor m => (forall a. f a -> m (g a)) -> Some f -> m (Some g) traverseSome f x = withSome x $ \x' -> fmap mkSome (f x')++-- | Monadic 'withSome'.+--+-- @since 1.0.1+withSomeM :: Monad m => m (Some tag) -> (forall a. tag a -> m r) -> m r+withSomeM m k = m >>= \s -> withSome s k ------------------------------------------------------------------------------- -- Church Some instances
src/Data/Some.hs view
@@ -10,6 +10,7 @@ #endif mkSome, withSome,+withSomeM, mapSome, foldSome, traverseSome,
src/Data/Some/Church.hs view
@@ -1,13 +1,14 @@ {-# LANGUAGE CPP #-} #if __GLASGOW_HASKELL__ >= 704-{-# LANGUAGE Safe #-}+{-# LANGUAGE Safe #-} #elif __GLASGOW_HASKELL__ >= 702-{-# LANGUAGE Trustworthy #-}+{-# LANGUAGE Trustworthy #-} #endif module Data.Some.Church ( Some(..), mkSome, mapSome,+ withSomeM, foldSome, traverseSome, ) where
src/Data/Some/GADT.hs view
@@ -13,6 +13,7 @@ Some(Some), mkSome, withSome,+ withSomeM, mapSome, foldSome, traverseSome,@@ -82,6 +83,12 @@ -- | Eliminator. withSome :: Some tag -> (forall a. tag a -> b) -> b withSome (Some thing) some = some thing++-- | Monadic 'withSome'.+--+-- @since 1.0.1+withSomeM :: Monad m => m (Some tag) -> (forall a. tag a -> m r) -> m r+withSomeM m k = m >>= \s -> withSome s k -- | @'flip' 'withSome'@ foldSome :: (forall a. tag a -> b) -> Some tag -> b
src/Data/Some/Newtype.hs view
@@ -3,7 +3,6 @@ {-# LANGUAGE RankNTypes #-} #if __GLASGOW_HASKELL__ >= 801 {-# LANGUAGE PatternSynonyms #-}-{-# LANGUAGE ViewPatterns #-} #endif #if __GLASGOW_HASKELL__ >= 706 {-# LANGUAGE PolyKinds #-}@@ -19,6 +18,7 @@ #endif mkSome, withSome,+ withSomeM, mapSome, foldSome, traverseSome,@@ -103,6 +103,12 @@ -- | Eliminator. withSome :: Some tag -> (forall a. tag a -> b) -> b withSome (UnsafeSome thing) some = some (unsafeCoerce thing)++-- | Monadic 'withSome'.+--+-- @since 1.0.1+withSomeM :: Monad m => m (Some tag) -> (forall a. tag a -> m r) -> m r+withSomeM m k = m >>= \s -> withSome s k -- | @'flip' 'withSome'@ foldSome :: (forall a. tag a -> b) -> Some tag -> b