{-# language Trustworthy #-} module NatOptics.Internal ( strNat, textStr, ) where import Control.Monad ( mfilter ) import Data.Eq ( (==) ) import Data.String ( String ) import Data.Text ( Text ) import Numeric.Natural ( Natural ) import Optics.Iso ( Iso', iso ) import Optics.Prism ( Prism', prism' ) import Text.Read ( Read, readMaybe ) import Text.Show ( Show, show ) import qualified Data.Text as Text textStr :: Iso' Text String textStr :: Iso' Text String textStr = (Text -> String) -> (String -> Text) -> Iso' Text String forall s a b t. (s -> a) -> (b -> t) -> Iso s t a b iso Text -> String Text.unpack String -> Text Text.pack strNat :: Prism' String Natural strNat :: Prism' String Natural strNat = Prism' String Natural forall a. (Read a, Show a) => Prism' String a readShowPrism readShowPrism :: (Read a, Show a) => Prism' String a readShowPrism :: Prism' String a readShowPrism = (a -> String) -> (String -> Maybe a) -> Prism' String a forall b s a. (b -> s) -> (s -> Maybe a) -> Prism s s a b prism' a -> String forall a. Show a => a -> String show (\String str -> (a -> Bool) -> Maybe a -> Maybe a forall (m :: * -> *) a. MonadPlus m => (a -> Bool) -> m a -> m a mfilter (\a n -> a -> String forall a. Show a => a -> String show a n String -> String -> Bool forall a. Eq a => a -> a -> Bool == String str) (String -> Maybe a forall a. Read a => String -> Maybe a readMaybe String str))