penny-lib-0.2.0.0: Penny/Lincoln/TextNonEmpty.hs
module Penny.Lincoln.TextNonEmpty (
TextNonEmpty (TextNonEmpty, first, rest),
unsafeTextNonEmpty,
any, all,
toText) where
import Prelude hiding (any, all)
import Data.Text ( Text, pack, cons )
import qualified Data.Text as X
data TextNonEmpty = TextNonEmpty { first :: Char
, rest :: Text }
deriving (Eq, Ord, Show)
unsafeTextNonEmpty :: String -> TextNonEmpty
unsafeTextNonEmpty s = TextNonEmpty (head s) (pack . tail $ s)
any :: (Char -> Bool) -> TextNonEmpty -> Bool
any f (TextNonEmpty c ts) = f c || X.any f ts
all :: (Char -> Bool) -> TextNonEmpty -> Bool
all f (TextNonEmpty c ts) = f c && X.all f ts
toText :: TextNonEmpty -> Text
toText (TextNonEmpty t ts) = t `cons` ts