Merge pull request #120 from martijnbastiaan/readMaybeEither
Banish `String` on `readMaybe` and `readEither`
This commit is contained in:
@@ -1,3 +1,8 @@
|
|||||||
|
Unreleased
|
||||||
|
=====
|
||||||
|
|
||||||
|
* Banish `String` on `readMaybe` and `readEither`.
|
||||||
|
|
||||||
0.3.0
|
0.3.0
|
||||||
=====
|
=====
|
||||||
|
|
||||||
|
|||||||
@@ -750,10 +750,10 @@ ratioPrec from GHC.Real
|
|||||||
ratioPrec1 from GHC.Real
|
ratioPrec1 from GHC.Real
|
||||||
ratioZeroDenominatorError from GHC.Real
|
ratioZeroDenominatorError from GHC.Real
|
||||||
readChan from Control.Concurrent.Chan
|
readChan from Control.Concurrent.Chan
|
||||||
readEither from Text.Read
|
readEither from Protolude
|
||||||
readFile from Data.Text.IO
|
readFile from Data.Text.IO
|
||||||
readMVar from GHC.MVar
|
readMVar from GHC.MVar
|
||||||
readMaybe from Text.Read
|
readMaybe from Protolude
|
||||||
reader from Control.Monad.Reader.Class
|
reader from Control.Monad.Reader.Class
|
||||||
reads from Text.Read
|
reads from Text.Read
|
||||||
realPart from Data.Complex
|
realPart from Data.Complex
|
||||||
|
|||||||
@@ -750,10 +750,10 @@ ratioPrec from GHC.Real
|
|||||||
ratioPrec1 from GHC.Real
|
ratioPrec1 from GHC.Real
|
||||||
ratioZeroDenominatorError from GHC.Real
|
ratioZeroDenominatorError from GHC.Real
|
||||||
readChan from Control.Concurrent.Chan
|
readChan from Control.Concurrent.Chan
|
||||||
readEither from Text.Read
|
readEither from Protolude
|
||||||
readFile from Data.Text.IO
|
readFile from Data.Text.IO
|
||||||
readMVar from GHC.MVar
|
readMVar from GHC.MVar
|
||||||
readMaybe from Text.Read
|
readMaybe from Protolude
|
||||||
reader from Control.Monad.Reader.Class
|
reader from Control.Monad.Reader.Class
|
||||||
reads from Text.Read
|
reads from Text.Read
|
||||||
realPart from Data.Complex
|
realPart from Data.Complex
|
||||||
|
|||||||
@@ -749,10 +749,10 @@ ratioPrec from GHC.Real
|
|||||||
ratioPrec1 from GHC.Real
|
ratioPrec1 from GHC.Real
|
||||||
ratioZeroDenominatorError from GHC.Real
|
ratioZeroDenominatorError from GHC.Real
|
||||||
readChan from Control.Concurrent.Chan
|
readChan from Control.Concurrent.Chan
|
||||||
readEither from Text.Read
|
readEither from Protolude
|
||||||
readFile from Data.Text.IO
|
readFile from Data.Text.IO
|
||||||
readMVar from GHC.MVar
|
readMVar from GHC.MVar
|
||||||
readMaybe from Text.Read
|
readMaybe from Protolude
|
||||||
reader from Control.Monad.Reader.Class
|
reader from Control.Monad.Reader.Class
|
||||||
reads from Text.Read
|
reads from Text.Read
|
||||||
realPart from Data.Complex
|
realPart from Data.Complex
|
||||||
|
|||||||
@@ -749,10 +749,10 @@ ratioPrec from GHC.Real
|
|||||||
ratioPrec1 from GHC.Real
|
ratioPrec1 from GHC.Real
|
||||||
ratioZeroDenominatorError from GHC.Real
|
ratioZeroDenominatorError from GHC.Real
|
||||||
readChan from Control.Concurrent.Chan
|
readChan from Control.Concurrent.Chan
|
||||||
readEither from Text.Read
|
readEither from Protolude
|
||||||
readFile from Data.Text.IO
|
readFile from Data.Text.IO
|
||||||
readMVar from GHC.MVar
|
readMVar from GHC.MVar
|
||||||
readMaybe from Text.Read
|
readMaybe from Protolude
|
||||||
reader from Control.Monad.Reader.Class
|
reader from Control.Monad.Reader.Class
|
||||||
reads from Text.Read
|
reads from Text.Read
|
||||||
realPart from Data.Complex
|
realPart from Data.Complex
|
||||||
|
|||||||
@@ -749,10 +749,10 @@ ratioPrec from GHC.Real
|
|||||||
ratioPrec1 from GHC.Real
|
ratioPrec1 from GHC.Real
|
||||||
ratioZeroDenominatorError from GHC.Real
|
ratioZeroDenominatorError from GHC.Real
|
||||||
readChan from Control.Concurrent.Chan
|
readChan from Control.Concurrent.Chan
|
||||||
readEither from Text.Read
|
readEither from Protolude
|
||||||
readFile from Data.Text.IO
|
readFile from Data.Text.IO
|
||||||
readMVar from GHC.MVar
|
readMVar from GHC.MVar
|
||||||
readMaybe from Text.Read
|
readMaybe from Protolude
|
||||||
reader from Control.Monad.Reader.Class
|
reader from Control.Monad.Reader.Class
|
||||||
reads from Text.Read
|
reads from Text.Read
|
||||||
realPart from Data.Complex
|
realPart from Data.Complex
|
||||||
|
|||||||
@@ -746,10 +746,10 @@ ratioPrec from GHC.Real
|
|||||||
ratioPrec1 from GHC.Real
|
ratioPrec1 from GHC.Real
|
||||||
ratioZeroDenominatorError from GHC.Real
|
ratioZeroDenominatorError from GHC.Real
|
||||||
readChan from Control.Concurrent.Chan
|
readChan from Control.Concurrent.Chan
|
||||||
readEither from Text.Read
|
readEither from Protolude
|
||||||
readFile from Data.Text.IO
|
readFile from Data.Text.IO
|
||||||
readMVar from GHC.MVar
|
readMVar from GHC.MVar
|
||||||
readMaybe from Text.Read
|
readMaybe from Protolude
|
||||||
reader from Control.Monad.Reader.Class
|
reader from Control.Monad.Reader.Class
|
||||||
reads from Text.Read
|
reads from Text.Read
|
||||||
realPart from Data.Complex
|
realPart from Data.Complex
|
||||||
|
|||||||
@@ -746,10 +746,10 @@ ratioPrec from GHC.Real
|
|||||||
ratioPrec1 from GHC.Real
|
ratioPrec1 from GHC.Real
|
||||||
ratioZeroDenominatorError from GHC.Real
|
ratioZeroDenominatorError from GHC.Real
|
||||||
readChan from Control.Concurrent.Chan
|
readChan from Control.Concurrent.Chan
|
||||||
readEither from Text.Read
|
readEither from Protolude
|
||||||
readFile from Data.Text.IO
|
readFile from Data.Text.IO
|
||||||
readMVar from GHC.MVar
|
readMVar from GHC.MVar
|
||||||
readMaybe from Text.Read
|
readMaybe from Protolude
|
||||||
reader from Control.Monad.Reader.Class
|
reader from Control.Monad.Reader.Class
|
||||||
reads from Text.Read
|
reads from Text.Read
|
||||||
realPart from Data.Complex
|
realPart from Data.Complex
|
||||||
|
|||||||
@@ -746,10 +746,10 @@ ratioPrec from GHC.Real
|
|||||||
ratioPrec1 from GHC.Real
|
ratioPrec1 from GHC.Real
|
||||||
ratioZeroDenominatorError from GHC.Real
|
ratioZeroDenominatorError from GHC.Real
|
||||||
readChan from Control.Concurrent.Chan
|
readChan from Control.Concurrent.Chan
|
||||||
readEither from Text.Read
|
readEither from Protolude
|
||||||
readFile from Data.Text.IO
|
readFile from Data.Text.IO
|
||||||
readMVar from GHC.MVar
|
readMVar from GHC.MVar
|
||||||
readMaybe from Text.Read
|
readMaybe from Protolude
|
||||||
reader from Control.Monad.Reader.Class
|
reader from Control.Monad.Reader.Class
|
||||||
reads from Text.Read
|
reads from Text.Read
|
||||||
realPart from Data.Complex
|
realPart from Data.Complex
|
||||||
|
|||||||
+26
-2
@@ -128,6 +128,8 @@ module Protolude (
|
|||||||
|
|
||||||
-- * Read functions
|
-- * Read functions
|
||||||
module Read,
|
module Read,
|
||||||
|
readMaybe,
|
||||||
|
readEither,
|
||||||
|
|
||||||
-- * System functions
|
-- * System functions
|
||||||
module System,
|
module System,
|
||||||
@@ -909,11 +911,10 @@ import Foreign.Storable as Foreign (Storable)
|
|||||||
import Foreign.StablePtr as Foreign (StablePtr)
|
import Foreign.StablePtr as Foreign (StablePtr)
|
||||||
|
|
||||||
-- Read instances hiding unsafe builtins (read)
|
-- Read instances hiding unsafe builtins (read)
|
||||||
|
import qualified Text.Read as Read
|
||||||
import Text.Read as Read (
|
import Text.Read as Read (
|
||||||
Read
|
Read
|
||||||
, reads
|
, reads
|
||||||
, readMaybe
|
|
||||||
, readEither
|
|
||||||
)
|
)
|
||||||
|
|
||||||
-- Type synonymss for lazy texts
|
-- Type synonymss for lazy texts
|
||||||
@@ -950,6 +951,29 @@ unsnoc = Foldable.foldr go Nothing
|
|||||||
applyN :: Int -> (a -> a) -> a -> a
|
applyN :: Int -> (a -> a) -> a -> a
|
||||||
applyN n f = Foldable.foldr (.) identity (List.replicate n f)
|
applyN n f = Foldable.foldr (.) identity (List.replicate n f)
|
||||||
|
|
||||||
|
-- | Parse a string using the 'Read' instance.
|
||||||
|
-- Succeeds if there is exactly one valid result.
|
||||||
|
--
|
||||||
|
-- >>> readMaybe ("123" :: Text) :: Maybe Int
|
||||||
|
-- Just 123
|
||||||
|
--
|
||||||
|
-- >>> readMaybe ("hello" :: Text) :: Maybe Int
|
||||||
|
-- Nothing
|
||||||
|
readMaybe :: (Read b, Conv.StringConv a String) => a -> Maybe b
|
||||||
|
readMaybe = Read.readMaybe . Conv.toS
|
||||||
|
|
||||||
|
-- | Parse a string using the 'Read' instance.
|
||||||
|
-- Succeeds if there is exactly one valid result.
|
||||||
|
-- A 'Left' value indicates a parse error.
|
||||||
|
--
|
||||||
|
-- >>> readEither "123" :: Either Text Int
|
||||||
|
-- Right 123
|
||||||
|
--
|
||||||
|
-- >>> readEither "hello" :: Either Text Int
|
||||||
|
-- Left "Prelude.read: no parse"
|
||||||
|
readEither :: (Read a, Conv.StringConv String e, Conv.StringConv e String) => e -> Either e a
|
||||||
|
readEither = first Conv.toS . Read.readEither . Conv.toS
|
||||||
|
|
||||||
-- | The print function outputs a value of any printable type to the standard
|
-- | The print function outputs a value of any printable type to the standard
|
||||||
-- output device. Printable types are those that are instances of class Show;
|
-- output device. Printable types are those that are instances of class Show;
|
||||||
-- print converts values to strings for output using the show operation and adds
|
-- print converts values to strings for output using the show operation and adds
|
||||||
|
|||||||
Reference in New Issue
Block a user