{-# LANGUAGE RankNTypes #-}
{-# LANGUAGE CPP #-}
#if defined(__GLASGOW_HASKELL__) && __GLASGOW_HASKELL__ >= 702
{-# LANGUAGE Safe #-}
#endif
#if defined(__GLASGOW_HASKELL__) && __GLASGOW_HASKELL__ >= 708
{-# LANGUAGE PolyKinds #-}
#endif
module Data.GADT.Show where
class GShow t where
gshowsPrec :: Int -> t a -> ShowS
gshows :: GShow t => t a -> ShowS
gshows :: t a -> ShowS
gshows = Int -> t a -> ShowS
forall k (t :: k -> *) (a :: k). GShow t => Int -> t a -> ShowS
gshowsPrec (-Int
1)
gshow :: (GShow t) => t a -> String
gshow :: t a -> String
gshow t a
x = t a -> ShowS
forall k (t :: k -> *) (a :: k). GShow t => t a -> ShowS
gshows t a
x String
""
newtype GReadResult t = GReadResult
{ GReadResult t -> forall b. (forall (a :: k). t a -> b) -> b
getGReadResult :: forall b . (forall a . t a -> b) -> b }
type GReadS t = String -> [(GReadResult t, String)]
class GRead t where
greadsPrec :: Int -> GReadS t
greads :: GRead t => GReadS t
greads :: GReadS t
greads = Int -> GReadS t
forall k (t :: k -> *). GRead t => Int -> GReadS t
greadsPrec (-Int
1)
gread :: GRead t => String -> (forall a. t a -> b) -> b
gread :: String -> (forall (a :: k). t a -> b) -> b
gread String
s forall (a :: k). t a -> b
g = case [GReadResult t] -> GReadResult t
forall p. [p] -> p
hd [GReadResult t
f | (GReadResult t
f, String
"") <- GReadS t
forall k (t :: k -> *). GRead t => GReadS t
greads String
s] of
GReadResult forall b. (forall (a :: k). t a -> b) -> b
res -> (forall (a :: k). t a -> b) -> b
forall b. (forall (a :: k). t a -> b) -> b
res forall (a :: k). t a -> b
g
where
hd :: [p] -> p
hd (p
x:[p]
_) = p
x
hd [p]
_ = String -> p
forall a. HasCallStack => String -> a
error String
"gread: no parse"