Skip to content

Commit 746fda6

Browse files
authored
Merge pull request serokell#256 from serokell/dk318/serokell#165-readMaybe-type-changing
[serokell#165] `readMaybe` type changing
2 parents f56a74e + d63872b commit 746fda6

File tree

3 files changed

+17
-2
lines changed

3 files changed

+17
-2
lines changed

CHANGES.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,10 @@ Unreleased
1515
* [#182](https://github.com/serokell/universum/issues/182):
1616
Deprecate `microlens` and `microlens-mtl` dependencies.
1717

18+
* [#165](https://github.com/serokell/universum/issues/165):
19+
Change the type of `readMaybe` from `readMaybe :: Read a => String -> Maybe a`
20+
to it's polymorphic version `readMaybe :: forall b a. (ToString a, Read b) => a -> Maybe b`.
21+
1822
1.7.3
1923
=====
2024

src/Universum/String/Conversion.hs

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,12 +25,14 @@ module Universum.String.Conversion
2525

2626
-- * Show and read functions
2727
, readEither
28+
, readMaybe
2829
, show
2930
) where
3031

3132
import Data.Bifunctor (first)
3233
import Data.Either (Either)
3334
import Data.Function (id, (.))
35+
import Data.Maybe (Maybe)
3436
import Data.String (String)
3537
import qualified Data.Text.Internal as T
3638
import qualified Data.Text.Internal.Fusion.Common as TF
@@ -47,7 +49,7 @@ import qualified Data.Text.Encoding as T
4749
import qualified Data.Text.Encoding.Error as T
4850
import qualified Data.Text.Lazy as LT
4951
import qualified Data.Text.Lazy.Encoding as LT
50-
import qualified Text.Read (readEither)
52+
import qualified Text.Read (readEither, readMaybe)
5153

5254
import qualified GHC.Show as Show (Show (show))
5355

@@ -293,6 +295,15 @@ be safe to collapse.
293295
readEither :: (ToString a, Read b) => a -> Either Text b
294296
readEither = first toText . Text.Read.readEither . toString
295297

298+
-- | Polymorhpic version of 'Text.Read.readMaybe'.
299+
--
300+
-- >>> readMaybe @Int @Text "123"
301+
-- Just 123
302+
-- >>> readMaybe @Int @Text "aa"
303+
-- Nothing
304+
readMaybe :: forall b a. (ToString a, Read b) => a -> Maybe b
305+
readMaybe = Text.Read.readMaybe . toString
306+
296307
-- | Generalized version of 'Prelude.show'.
297308
show :: forall b a . (Show.Show a, IsString b) => a -> b
298309
show x = fromString (Show.show x)

src/Universum/String/Reexport.hs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,4 +24,4 @@ import Data.Text.Encoding (decodeUtf8', decodeUtf8With)
2424
import Data.Text.Encoding.Error (OnDecodeError, OnError, UnicodeException, lenientDecode,
2525
strictDecode)
2626
import Data.Text.Lazy (fromStrict, toStrict)
27-
import Text.Read (Read, readMaybe, reads)
27+
import Text.Read (Read, reads)

0 commit comments

Comments
 (0)