nat-optics-1.0.0.3: src/NatOptics/Internal.hs
{-# 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.unpack Text.pack
strNat :: Prism' String Natural
strNat = readShowPrism
readShowPrism :: (Read a, Show a) => Prism' String a
readShowPrism = prism' show (\str -> mfilter (\n -> show n == str) (readMaybe str))