Why did I implement this overly complicated lift by hand again ?
This commit is contained in:
parent
95f9ab35b1
commit
03fbbc3a96
1 changed files with 3 additions and 7 deletions
|
@ -8,7 +8,7 @@ module PDF.Pages (
|
||||||
import Codec.Compression.Zlib (decompress)
|
import Codec.Compression.Zlib (decompress)
|
||||||
import Control.Applicative ((<|>))
|
import Control.Applicative ((<|>))
|
||||||
import Control.Monad (foldM)
|
import Control.Monad (foldM)
|
||||||
import Control.Monad.RWS (RWST(..), ask, evalRWST, mapRWST, modify)
|
import Control.Monad.RWS (RWST(..), ask, evalRWST, lift, modify)
|
||||||
import qualified Control.Monad.RWS as RWS (get)
|
import qualified Control.Monad.RWS as RWS (get)
|
||||||
import Data.ByteString (ByteString)
|
import Data.ByteString (ByteString)
|
||||||
import qualified Data.ByteString.Lazy as Lazy (fromStrict, toStrict)
|
import qualified Data.ByteString.Lazy as Lazy (fromStrict, toStrict)
|
||||||
|
@ -35,15 +35,11 @@ data Page = Page {
|
||||||
|
|
||||||
infixl 1 \\=
|
infixl 1 \\=
|
||||||
(\\=) :: T a -> (a -> Either String b) -> T b
|
(\\=) :: T a -> (a -> Either String b) -> T b
|
||||||
x \\= f = mapRWST ((\(a, s, w) -> (\b -> (b, s, w)) <$> f a) =<<) x
|
x \\= f = x >>= lift . f
|
||||||
|
|
||||||
infixl 1 //=
|
infixl 1 //=
|
||||||
(//=) :: Either String a -> (a -> T b) -> T b
|
(//=) :: Either String a -> (a -> T b) -> T b
|
||||||
(//=) (Left e) _ = RWST (\_ _ -> Left e)
|
x //= f = lift x >>= f
|
||||||
(//=) (Right a) f = f a
|
|
||||||
|
|
||||||
lift :: Either String a -> T a
|
|
||||||
lift x = x //= return
|
|
||||||
|
|
||||||
expected :: Show a => String -> a -> Either String b
|
expected :: Show a => String -> a -> Either String b
|
||||||
expected name = Left . printf "Not a %s: %s" name . show
|
expected name = Left . printf "Not a %s: %s" name . show
|
||||||
|
|
Loading…
Reference in a new issue