{-# LANGUAGE FlexibleContexts #-} module Saturn.Unstable.Type.Wildcard where import qualified Control.Monad as Monad import qualified Data.Coerce as Coerce import qualified Data.Text.Lazy.Builder as Builder import qualified Text.Parsec as Parsec newtype Wildcard = Wildcard () deriving (Wildcard -> Wildcard -> Bool (Wildcard -> Wildcard -> Bool) -> (Wildcard -> Wildcard -> Bool) -> Eq Wildcard forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a $c== :: Wildcard -> Wildcard -> Bool == :: Wildcard -> Wildcard -> Bool $c/= :: Wildcard -> Wildcard -> Bool /= :: Wildcard -> Wildcard -> Bool Eq, Int -> Wildcard -> ShowS [Wildcard] -> ShowS Wildcard -> String (Int -> Wildcard -> ShowS) -> (Wildcard -> String) -> ([Wildcard] -> ShowS) -> Show Wildcard forall a. (Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a $cshowsPrec :: Int -> Wildcard -> ShowS showsPrec :: Int -> Wildcard -> ShowS $cshow :: Wildcard -> String show :: Wildcard -> String $cshowList :: [Wildcard] -> ShowS showList :: [Wildcard] -> ShowS Show) fromUnit :: () -> Wildcard fromUnit :: () -> Wildcard fromUnit = () -> Wildcard forall a b. Coercible a b => a -> b Coerce.coerce toUnit :: Wildcard -> () toUnit :: Wildcard -> () toUnit = Wildcard -> () forall a b. Coercible a b => a -> b Coerce.coerce parsec :: (Parsec.Stream s m Char) => Parsec.ParsecT s u m Wildcard parsec :: forall s (m :: * -> *) u. Stream s m Char => ParsecT s u m Wildcard parsec = (() -> Wildcard) -> ParsecT s u m () -> ParsecT s u m Wildcard forall a b. (a -> b) -> ParsecT s u m a -> ParsecT s u m b forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b fmap () -> Wildcard fromUnit (ParsecT s u m () -> ParsecT s u m Wildcard) -> (ParsecT s u m Char -> ParsecT s u m ()) -> ParsecT s u m Char -> ParsecT s u m Wildcard forall b c a. (b -> c) -> (a -> b) -> a -> c . ParsecT s u m Char -> ParsecT s u m () forall (f :: * -> *) a. Functor f => f a -> f () Monad.void (ParsecT s u m Char -> ParsecT s u m Wildcard) -> ParsecT s u m Char -> ParsecT s u m Wildcard forall a b. (a -> b) -> a -> b $ Char -> ParsecT s u m Char forall s (m :: * -> *) u. Stream s m Char => Char -> ParsecT s u m Char Parsec.char Char '*' toBuilder :: Wildcard -> Builder.Builder toBuilder :: Wildcard -> Builder toBuilder = Builder -> Wildcard -> Builder forall a b. a -> b -> a const (Builder -> Wildcard -> Builder) -> Builder -> Wildcard -> Builder forall a b. (a -> b) -> a -> b $ Char -> Builder Builder.singleton Char '*'