{-# LANGUAGE DeriveDataTypeable, FlexibleContexts #-}
module Debian.Version.Internal
    ( DebianVersion(..)
    , Numeric(..)
    , NonNumeric(..)
    , Found(..)
    ) where

import Data.Data (Data)
import Data.Typeable (Typeable)

-- Currently we store the original version string in the data-type so
-- that we can faithfully reproduce it quickly. Currently we do not
-- have any way to modify a version number -- so this works fine. May
-- have to change later.
data DebianVersion
    = DebianVersion String (Found Int, NonNumeric, Found NonNumeric) deriving (Typeable DebianVersion
DataType
Constr
Typeable DebianVersion
-> (forall (c :: * -> *).
    (forall d b. Data d => c (d -> b) -> d -> c b)
    -> (forall g. g -> c g) -> DebianVersion -> c DebianVersion)
-> (forall (c :: * -> *).
    (forall b r. Data b => c (b -> r) -> c r)
    -> (forall r. r -> c r) -> Constr -> c DebianVersion)
-> (DebianVersion -> Constr)
-> (DebianVersion -> DataType)
-> (forall (t :: * -> *) (c :: * -> *).
    Typeable t =>
    (forall d. Data d => c (t d)) -> Maybe (c DebianVersion))
-> (forall (t :: * -> * -> *) (c :: * -> *).
    Typeable t =>
    (forall d e. (Data d, Data e) => c (t d e))
    -> Maybe (c DebianVersion))
-> ((forall b. Data b => b -> b) -> DebianVersion -> DebianVersion)
-> (forall r r'.
    (r -> r' -> r)
    -> r -> (forall d. Data d => d -> r') -> DebianVersion -> r)
-> (forall r r'.
    (r' -> r -> r)
    -> r -> (forall d. Data d => d -> r') -> DebianVersion -> r)
-> (forall u. (forall d. Data d => d -> u) -> DebianVersion -> [u])
-> (forall u.
    Int -> (forall d. Data d => d -> u) -> DebianVersion -> u)
-> (forall (m :: * -> *).
    Monad m =>
    (forall d. Data d => d -> m d) -> DebianVersion -> m DebianVersion)
-> (forall (m :: * -> *).
    MonadPlus m =>
    (forall d. Data d => d -> m d) -> DebianVersion -> m DebianVersion)
-> (forall (m :: * -> *).
    MonadPlus m =>
    (forall d. Data d => d -> m d) -> DebianVersion -> m DebianVersion)
-> Data DebianVersion
DebianVersion -> DataType
DebianVersion -> Constr
(forall b. Data b => b -> b) -> DebianVersion -> DebianVersion
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> DebianVersion -> c DebianVersion
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c DebianVersion
forall a.
Typeable a
-> (forall (c :: * -> *).
    (forall d b. Data d => c (d -> b) -> d -> c b)
    -> (forall g. g -> c g) -> a -> c a)
-> (forall (c :: * -> *).
    (forall b r. Data b => c (b -> r) -> c r)
    -> (forall r. r -> c r) -> Constr -> c a)
-> (a -> Constr)
-> (a -> DataType)
-> (forall (t :: * -> *) (c :: * -> *).
    Typeable t =>
    (forall d. Data d => c (t d)) -> Maybe (c a))
-> (forall (t :: * -> * -> *) (c :: * -> *).
    Typeable t =>
    (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c a))
-> ((forall b. Data b => b -> b) -> a -> a)
-> (forall r r'.
    (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> a -> r)
-> (forall r r'.
    (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> a -> r)
-> (forall u. (forall d. Data d => d -> u) -> a -> [u])
-> (forall u. Int -> (forall d. Data d => d -> u) -> a -> u)
-> (forall (m :: * -> *).
    Monad m =>
    (forall d. Data d => d -> m d) -> a -> m a)
-> (forall (m :: * -> *).
    MonadPlus m =>
    (forall d. Data d => d -> m d) -> a -> m a)
-> (forall (m :: * -> *).
    MonadPlus m =>
    (forall d. Data d => d -> m d) -> a -> m a)
-> Data a
forall u. Int -> (forall d. Data d => d -> u) -> DebianVersion -> u
forall u. (forall d. Data d => d -> u) -> DebianVersion -> [u]
forall r r'.
(r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> DebianVersion -> r
forall r r'.
(r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> DebianVersion -> r
forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d) -> DebianVersion -> m DebianVersion
forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> DebianVersion -> m DebianVersion
forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c DebianVersion
forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> DebianVersion -> c DebianVersion
forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c DebianVersion)
forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e))
-> Maybe (c DebianVersion)
$cDebianVersion :: Constr
$tDebianVersion :: DataType
gmapMo :: (forall d. Data d => d -> m d) -> DebianVersion -> m DebianVersion
$cgmapMo :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> DebianVersion -> m DebianVersion
gmapMp :: (forall d. Data d => d -> m d) -> DebianVersion -> m DebianVersion
$cgmapMp :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> DebianVersion -> m DebianVersion
gmapM :: (forall d. Data d => d -> m d) -> DebianVersion -> m DebianVersion
$cgmapM :: forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d) -> DebianVersion -> m DebianVersion
gmapQi :: Int -> (forall d. Data d => d -> u) -> DebianVersion -> u
$cgmapQi :: forall u. Int -> (forall d. Data d => d -> u) -> DebianVersion -> u
gmapQ :: (forall d. Data d => d -> u) -> DebianVersion -> [u]
$cgmapQ :: forall u. (forall d. Data d => d -> u) -> DebianVersion -> [u]
gmapQr :: (r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> DebianVersion -> r
$cgmapQr :: forall r r'.
(r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> DebianVersion -> r
gmapQl :: (r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> DebianVersion -> r
$cgmapQl :: forall r r'.
(r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> DebianVersion -> r
gmapT :: (forall b. Data b => b -> b) -> DebianVersion -> DebianVersion
$cgmapT :: (forall b. Data b => b -> b) -> DebianVersion -> DebianVersion
dataCast2 :: (forall d e. (Data d, Data e) => c (t d e))
-> Maybe (c DebianVersion)
$cdataCast2 :: forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e))
-> Maybe (c DebianVersion)
dataCast1 :: (forall d. Data d => c (t d)) -> Maybe (c DebianVersion)
$cdataCast1 :: forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c DebianVersion)
dataTypeOf :: DebianVersion -> DataType
$cdataTypeOf :: DebianVersion -> DataType
toConstr :: DebianVersion -> Constr
$ctoConstr :: DebianVersion -> Constr
gunfold :: (forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c DebianVersion
$cgunfold :: forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c DebianVersion
gfoldl :: (forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> DebianVersion -> c DebianVersion
$cgfoldl :: forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> DebianVersion -> c DebianVersion
$cp1Data :: Typeable DebianVersion
Data, Typeable)

data NonNumeric
    = NonNumeric String (Found Numeric)
      deriving (Int -> NonNumeric -> ShowS
[NonNumeric] -> ShowS
NonNumeric -> String
(Int -> NonNumeric -> ShowS)
-> (NonNumeric -> String)
-> ([NonNumeric] -> ShowS)
-> Show NonNumeric
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [NonNumeric] -> ShowS
$cshowList :: [NonNumeric] -> ShowS
show :: NonNumeric -> String
$cshow :: NonNumeric -> String
showsPrec :: Int -> NonNumeric -> ShowS
$cshowsPrec :: Int -> NonNumeric -> ShowS
Show, Typeable NonNumeric
DataType
Constr
Typeable NonNumeric
-> (forall (c :: * -> *).
    (forall d b. Data d => c (d -> b) -> d -> c b)
    -> (forall g. g -> c g) -> NonNumeric -> c NonNumeric)
-> (forall (c :: * -> *).
    (forall b r. Data b => c (b -> r) -> c r)
    -> (forall r. r -> c r) -> Constr -> c NonNumeric)
-> (NonNumeric -> Constr)
-> (NonNumeric -> DataType)
-> (forall (t :: * -> *) (c :: * -> *).
    Typeable t =>
    (forall d. Data d => c (t d)) -> Maybe (c NonNumeric))
-> (forall (t :: * -> * -> *) (c :: * -> *).
    Typeable t =>
    (forall d e. (Data d, Data e) => c (t d e))
    -> Maybe (c NonNumeric))
-> ((forall b. Data b => b -> b) -> NonNumeric -> NonNumeric)
-> (forall r r'.
    (r -> r' -> r)
    -> r -> (forall d. Data d => d -> r') -> NonNumeric -> r)
-> (forall r r'.
    (r' -> r -> r)
    -> r -> (forall d. Data d => d -> r') -> NonNumeric -> r)
-> (forall u. (forall d. Data d => d -> u) -> NonNumeric -> [u])
-> (forall u.
    Int -> (forall d. Data d => d -> u) -> NonNumeric -> u)
-> (forall (m :: * -> *).
    Monad m =>
    (forall d. Data d => d -> m d) -> NonNumeric -> m NonNumeric)
-> (forall (m :: * -> *).
    MonadPlus m =>
    (forall d. Data d => d -> m d) -> NonNumeric -> m NonNumeric)
-> (forall (m :: * -> *).
    MonadPlus m =>
    (forall d. Data d => d -> m d) -> NonNumeric -> m NonNumeric)
-> Data NonNumeric
NonNumeric -> DataType
NonNumeric -> Constr
(forall b. Data b => b -> b) -> NonNumeric -> NonNumeric
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> NonNumeric -> c NonNumeric
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c NonNumeric
forall a.
Typeable a
-> (forall (c :: * -> *).
    (forall d b. Data d => c (d -> b) -> d -> c b)
    -> (forall g. g -> c g) -> a -> c a)
-> (forall (c :: * -> *).
    (forall b r. Data b => c (b -> r) -> c r)
    -> (forall r. r -> c r) -> Constr -> c a)
-> (a -> Constr)
-> (a -> DataType)
-> (forall (t :: * -> *) (c :: * -> *).
    Typeable t =>
    (forall d. Data d => c (t d)) -> Maybe (c a))
-> (forall (t :: * -> * -> *) (c :: * -> *).
    Typeable t =>
    (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c a))
-> ((forall b. Data b => b -> b) -> a -> a)
-> (forall r r'.
    (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> a -> r)
-> (forall r r'.
    (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> a -> r)
-> (forall u. (forall d. Data d => d -> u) -> a -> [u])
-> (forall u. Int -> (forall d. Data d => d -> u) -> a -> u)
-> (forall (m :: * -> *).
    Monad m =>
    (forall d. Data d => d -> m d) -> a -> m a)
-> (forall (m :: * -> *).
    MonadPlus m =>
    (forall d. Data d => d -> m d) -> a -> m a)
-> (forall (m :: * -> *).
    MonadPlus m =>
    (forall d. Data d => d -> m d) -> a -> m a)
-> Data a
forall u. Int -> (forall d. Data d => d -> u) -> NonNumeric -> u
forall u. (forall d. Data d => d -> u) -> NonNumeric -> [u]
forall r r'.
(r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> NonNumeric -> r
forall r r'.
(r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> NonNumeric -> r
forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d) -> NonNumeric -> m NonNumeric
forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> NonNumeric -> m NonNumeric
forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c NonNumeric
forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> NonNumeric -> c NonNumeric
forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c NonNumeric)
forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c NonNumeric)
$cNonNumeric :: Constr
$tNonNumeric :: DataType
gmapMo :: (forall d. Data d => d -> m d) -> NonNumeric -> m NonNumeric
$cgmapMo :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> NonNumeric -> m NonNumeric
gmapMp :: (forall d. Data d => d -> m d) -> NonNumeric -> m NonNumeric
$cgmapMp :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> NonNumeric -> m NonNumeric
gmapM :: (forall d. Data d => d -> m d) -> NonNumeric -> m NonNumeric
$cgmapM :: forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d) -> NonNumeric -> m NonNumeric
gmapQi :: Int -> (forall d. Data d => d -> u) -> NonNumeric -> u
$cgmapQi :: forall u. Int -> (forall d. Data d => d -> u) -> NonNumeric -> u
gmapQ :: (forall d. Data d => d -> u) -> NonNumeric -> [u]
$cgmapQ :: forall u. (forall d. Data d => d -> u) -> NonNumeric -> [u]
gmapQr :: (r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> NonNumeric -> r
$cgmapQr :: forall r r'.
(r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> NonNumeric -> r
gmapQl :: (r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> NonNumeric -> r
$cgmapQl :: forall r r'.
(r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> NonNumeric -> r
gmapT :: (forall b. Data b => b -> b) -> NonNumeric -> NonNumeric
$cgmapT :: (forall b. Data b => b -> b) -> NonNumeric -> NonNumeric
dataCast2 :: (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c NonNumeric)
$cdataCast2 :: forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c NonNumeric)
dataCast1 :: (forall d. Data d => c (t d)) -> Maybe (c NonNumeric)
$cdataCast1 :: forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c NonNumeric)
dataTypeOf :: NonNumeric -> DataType
$cdataTypeOf :: NonNumeric -> DataType
toConstr :: NonNumeric -> Constr
$ctoConstr :: NonNumeric -> Constr
gunfold :: (forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c NonNumeric
$cgunfold :: forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c NonNumeric
gfoldl :: (forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> NonNumeric -> c NonNumeric
$cgfoldl :: forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> NonNumeric -> c NonNumeric
$cp1Data :: Typeable NonNumeric
Data, Typeable)

data Numeric
    = Numeric Int (Maybe NonNumeric)
      deriving (Int -> Numeric -> ShowS
[Numeric] -> ShowS
Numeric -> String
(Int -> Numeric -> ShowS)
-> (Numeric -> String) -> ([Numeric] -> ShowS) -> Show Numeric
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [Numeric] -> ShowS
$cshowList :: [Numeric] -> ShowS
show :: Numeric -> String
$cshow :: Numeric -> String
showsPrec :: Int -> Numeric -> ShowS
$cshowsPrec :: Int -> Numeric -> ShowS
Show, Typeable Numeric
DataType
Constr
Typeable Numeric
-> (forall (c :: * -> *).
    (forall d b. Data d => c (d -> b) -> d -> c b)
    -> (forall g. g -> c g) -> Numeric -> c Numeric)
-> (forall (c :: * -> *).
    (forall b r. Data b => c (b -> r) -> c r)
    -> (forall r. r -> c r) -> Constr -> c Numeric)
-> (Numeric -> Constr)
-> (Numeric -> DataType)
-> (forall (t :: * -> *) (c :: * -> *).
    Typeable t =>
    (forall d. Data d => c (t d)) -> Maybe (c Numeric))
-> (forall (t :: * -> * -> *) (c :: * -> *).
    Typeable t =>
    (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c Numeric))
-> ((forall b. Data b => b -> b) -> Numeric -> Numeric)
-> (forall r r'.
    (r -> r' -> r)
    -> r -> (forall d. Data d => d -> r') -> Numeric -> r)
-> (forall r r'.
    (r' -> r -> r)
    -> r -> (forall d. Data d => d -> r') -> Numeric -> r)
-> (forall u. (forall d. Data d => d -> u) -> Numeric -> [u])
-> (forall u. Int -> (forall d. Data d => d -> u) -> Numeric -> u)
-> (forall (m :: * -> *).
    Monad m =>
    (forall d. Data d => d -> m d) -> Numeric -> m Numeric)
-> (forall (m :: * -> *).
    MonadPlus m =>
    (forall d. Data d => d -> m d) -> Numeric -> m Numeric)
-> (forall (m :: * -> *).
    MonadPlus m =>
    (forall d. Data d => d -> m d) -> Numeric -> m Numeric)
-> Data Numeric
Numeric -> DataType
Numeric -> Constr
(forall b. Data b => b -> b) -> Numeric -> Numeric
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> Numeric -> c Numeric
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c Numeric
forall a.
Typeable a
-> (forall (c :: * -> *).
    (forall d b. Data d => c (d -> b) -> d -> c b)
    -> (forall g. g -> c g) -> a -> c a)
-> (forall (c :: * -> *).
    (forall b r. Data b => c (b -> r) -> c r)
    -> (forall r. r -> c r) -> Constr -> c a)
-> (a -> Constr)
-> (a -> DataType)
-> (forall (t :: * -> *) (c :: * -> *).
    Typeable t =>
    (forall d. Data d => c (t d)) -> Maybe (c a))
-> (forall (t :: * -> * -> *) (c :: * -> *).
    Typeable t =>
    (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c a))
-> ((forall b. Data b => b -> b) -> a -> a)
-> (forall r r'.
    (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> a -> r)
-> (forall r r'.
    (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> a -> r)
-> (forall u. (forall d. Data d => d -> u) -> a -> [u])
-> (forall u. Int -> (forall d. Data d => d -> u) -> a -> u)
-> (forall (m :: * -> *).
    Monad m =>
    (forall d. Data d => d -> m d) -> a -> m a)
-> (forall (m :: * -> *).
    MonadPlus m =>
    (forall d. Data d => d -> m d) -> a -> m a)
-> (forall (m :: * -> *).
    MonadPlus m =>
    (forall d. Data d => d -> m d) -> a -> m a)
-> Data a
forall u. Int -> (forall d. Data d => d -> u) -> Numeric -> u
forall u. (forall d. Data d => d -> u) -> Numeric -> [u]
forall r r'.
(r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> Numeric -> r
forall r r'.
(r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> Numeric -> r
forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d) -> Numeric -> m Numeric
forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> Numeric -> m Numeric
forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c Numeric
forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> Numeric -> c Numeric
forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c Numeric)
forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c Numeric)
$cNumeric :: Constr
$tNumeric :: DataType
gmapMo :: (forall d. Data d => d -> m d) -> Numeric -> m Numeric
$cgmapMo :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> Numeric -> m Numeric
gmapMp :: (forall d. Data d => d -> m d) -> Numeric -> m Numeric
$cgmapMp :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> Numeric -> m Numeric
gmapM :: (forall d. Data d => d -> m d) -> Numeric -> m Numeric
$cgmapM :: forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d) -> Numeric -> m Numeric
gmapQi :: Int -> (forall d. Data d => d -> u) -> Numeric -> u
$cgmapQi :: forall u. Int -> (forall d. Data d => d -> u) -> Numeric -> u
gmapQ :: (forall d. Data d => d -> u) -> Numeric -> [u]
$cgmapQ :: forall u. (forall d. Data d => d -> u) -> Numeric -> [u]
gmapQr :: (r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> Numeric -> r
$cgmapQr :: forall r r'.
(r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> Numeric -> r
gmapQl :: (r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> Numeric -> r
$cgmapQl :: forall r r'.
(r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> Numeric -> r
gmapT :: (forall b. Data b => b -> b) -> Numeric -> Numeric
$cgmapT :: (forall b. Data b => b -> b) -> Numeric -> Numeric
dataCast2 :: (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c Numeric)
$cdataCast2 :: forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c Numeric)
dataCast1 :: (forall d. Data d => c (t d)) -> Maybe (c Numeric)
$cdataCast1 :: forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c Numeric)
dataTypeOf :: Numeric -> DataType
$cdataTypeOf :: Numeric -> DataType
toConstr :: Numeric -> Constr
$ctoConstr :: Numeric -> Constr
gunfold :: (forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c Numeric
$cgunfold :: forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c Numeric
gfoldl :: (forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> Numeric -> c Numeric
$cgfoldl :: forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> Numeric -> c Numeric
$cp1Data :: Typeable Numeric
Data, Typeable)

data Found a
    = Found { Found a -> a
unFound :: a }
    | Simulated { unFound :: a }
      deriving (Int -> Found a -> ShowS
[Found a] -> ShowS
Found a -> String
(Int -> Found a -> ShowS)
-> (Found a -> String) -> ([Found a] -> ShowS) -> Show (Found a)
forall a. Show a => Int -> Found a -> ShowS
forall a. Show a => [Found a] -> ShowS
forall a. Show a => Found a -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [Found a] -> ShowS
$cshowList :: forall a. Show a => [Found a] -> ShowS
show :: Found a -> String
$cshow :: forall a. Show a => Found a -> String
showsPrec :: Int -> Found a -> ShowS
$cshowsPrec :: forall a. Show a => Int -> Found a -> ShowS
Show, Typeable (Found a)
DataType
Constr
Typeable (Found a)
-> (forall (c :: * -> *).
    (forall d b. Data d => c (d -> b) -> d -> c b)
    -> (forall g. g -> c g) -> Found a -> c (Found a))
-> (forall (c :: * -> *).
    (forall b r. Data b => c (b -> r) -> c r)
    -> (forall r. r -> c r) -> Constr -> c (Found a))
-> (Found a -> Constr)
-> (Found a -> DataType)
-> (forall (t :: * -> *) (c :: * -> *).
    Typeable t =>
    (forall d. Data d => c (t d)) -> Maybe (c (Found a)))
-> (forall (t :: * -> * -> *) (c :: * -> *).
    Typeable t =>
    (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c (Found a)))
-> ((forall b. Data b => b -> b) -> Found a -> Found a)
-> (forall r r'.
    (r -> r' -> r)
    -> r -> (forall d. Data d => d -> r') -> Found a -> r)
-> (forall r r'.
    (r' -> r -> r)
    -> r -> (forall d. Data d => d -> r') -> Found a -> r)
-> (forall u. (forall d. Data d => d -> u) -> Found a -> [u])
-> (forall u. Int -> (forall d. Data d => d -> u) -> Found a -> u)
-> (forall (m :: * -> *).
    Monad m =>
    (forall d. Data d => d -> m d) -> Found a -> m (Found a))
-> (forall (m :: * -> *).
    MonadPlus m =>
    (forall d. Data d => d -> m d) -> Found a -> m (Found a))
-> (forall (m :: * -> *).
    MonadPlus m =>
    (forall d. Data d => d -> m d) -> Found a -> m (Found a))
-> Data (Found a)
Found a -> DataType
Found a -> Constr
(forall d. Data d => c (t d)) -> Maybe (c (Found a))
(forall b. Data b => b -> b) -> Found a -> Found a
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> Found a -> c (Found a)
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c (Found a)
forall a. Data a => Typeable (Found a)
forall a. Data a => Found a -> DataType
forall a. Data a => Found a -> Constr
forall a.
Data a =>
(forall b. Data b => b -> b) -> Found a -> Found a
forall a u.
Data a =>
Int -> (forall d. Data d => d -> u) -> Found a -> u
forall a u.
Data a =>
(forall d. Data d => d -> u) -> Found a -> [u]
forall a r r'.
Data a =>
(r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> Found a -> r
forall a r r'.
Data a =>
(r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> Found a -> r
forall a (m :: * -> *).
(Data a, Monad m) =>
(forall d. Data d => d -> m d) -> Found a -> m (Found a)
forall a (m :: * -> *).
(Data a, MonadPlus m) =>
(forall d. Data d => d -> m d) -> Found a -> m (Found a)
forall a (c :: * -> *).
Data a =>
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c (Found a)
forall a (c :: * -> *).
Data a =>
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> Found a -> c (Found a)
forall a (t :: * -> *) (c :: * -> *).
(Data a, Typeable t) =>
(forall d. Data d => c (t d)) -> Maybe (c (Found a))
forall a (t :: * -> * -> *) (c :: * -> *).
(Data a, Typeable t) =>
(forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c (Found a))
forall a.
Typeable a
-> (forall (c :: * -> *).
    (forall d b. Data d => c (d -> b) -> d -> c b)
    -> (forall g. g -> c g) -> a -> c a)
-> (forall (c :: * -> *).
    (forall b r. Data b => c (b -> r) -> c r)
    -> (forall r. r -> c r) -> Constr -> c a)
-> (a -> Constr)
-> (a -> DataType)
-> (forall (t :: * -> *) (c :: * -> *).
    Typeable t =>
    (forall d. Data d => c (t d)) -> Maybe (c a))
-> (forall (t :: * -> * -> *) (c :: * -> *).
    Typeable t =>
    (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c a))
-> ((forall b. Data b => b -> b) -> a -> a)
-> (forall r r'.
    (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> a -> r)
-> (forall r r'.
    (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> a -> r)
-> (forall u. (forall d. Data d => d -> u) -> a -> [u])
-> (forall u. Int -> (forall d. Data d => d -> u) -> a -> u)
-> (forall (m :: * -> *).
    Monad m =>
    (forall d. Data d => d -> m d) -> a -> m a)
-> (forall (m :: * -> *).
    MonadPlus m =>
    (forall d. Data d => d -> m d) -> a -> m a)
-> (forall (m :: * -> *).
    MonadPlus m =>
    (forall d. Data d => d -> m d) -> a -> m a)
-> Data a
forall u. Int -> (forall d. Data d => d -> u) -> Found a -> u
forall u. (forall d. Data d => d -> u) -> Found a -> [u]
forall r r'.
(r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> Found a -> r
forall r r'.
(r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> Found a -> r
forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d) -> Found a -> m (Found a)
forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> Found a -> m (Found a)
forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c (Found a)
forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> Found a -> c (Found a)
forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c (Found a))
forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c (Found a))
$cSimulated :: Constr
$cFound :: Constr
$tFound :: DataType
gmapMo :: (forall d. Data d => d -> m d) -> Found a -> m (Found a)
$cgmapMo :: forall a (m :: * -> *).
(Data a, MonadPlus m) =>
(forall d. Data d => d -> m d) -> Found a -> m (Found a)
gmapMp :: (forall d. Data d => d -> m d) -> Found a -> m (Found a)
$cgmapMp :: forall a (m :: * -> *).
(Data a, MonadPlus m) =>
(forall d. Data d => d -> m d) -> Found a -> m (Found a)
gmapM :: (forall d. Data d => d -> m d) -> Found a -> m (Found a)
$cgmapM :: forall a (m :: * -> *).
(Data a, Monad m) =>
(forall d. Data d => d -> m d) -> Found a -> m (Found a)
gmapQi :: Int -> (forall d. Data d => d -> u) -> Found a -> u
$cgmapQi :: forall a u.
Data a =>
Int -> (forall d. Data d => d -> u) -> Found a -> u
gmapQ :: (forall d. Data d => d -> u) -> Found a -> [u]
$cgmapQ :: forall a u.
Data a =>
(forall d. Data d => d -> u) -> Found a -> [u]
gmapQr :: (r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> Found a -> r
$cgmapQr :: forall a r r'.
Data a =>
(r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> Found a -> r
gmapQl :: (r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> Found a -> r
$cgmapQl :: forall a r r'.
Data a =>
(r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> Found a -> r
gmapT :: (forall b. Data b => b -> b) -> Found a -> Found a
$cgmapT :: forall a.
Data a =>
(forall b. Data b => b -> b) -> Found a -> Found a
dataCast2 :: (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c (Found a))
$cdataCast2 :: forall a (t :: * -> * -> *) (c :: * -> *).
(Data a, Typeable t) =>
(forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c (Found a))
dataCast1 :: (forall d. Data d => c (t d)) -> Maybe (c (Found a))
$cdataCast1 :: forall a (t :: * -> *) (c :: * -> *).
(Data a, Typeable t) =>
(forall d. Data d => c (t d)) -> Maybe (c (Found a))
dataTypeOf :: Found a -> DataType
$cdataTypeOf :: forall a. Data a => Found a -> DataType
toConstr :: Found a -> Constr
$ctoConstr :: forall a. Data a => Found a -> Constr
gunfold :: (forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c (Found a)
$cgunfold :: forall a (c :: * -> *).
Data a =>
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c (Found a)
gfoldl :: (forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> Found a -> c (Found a)
$cgfoldl :: forall a (c :: * -> *).
Data a =>
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> Found a -> c (Found a)
$cp1Data :: forall a. Data a => Typeable (Found a)
Data, Typeable)

instance (Eq a) => Eq (Found a) where
    Found a
f1 == :: Found a -> Found a -> Bool
== Found a
f2 = (Found a -> a
forall a. Found a -> a
unFound Found a
f1) a -> a -> Bool
forall a. Eq a => a -> a -> Bool
== (Found a -> a
forall a. Found a -> a
unFound Found a
f2)

instance (Ord a) => Ord (Found a) where
    compare :: Found a -> Found a -> Ordering
compare Found a
f1 Found a
f2 = a -> a -> Ordering
forall a. Ord a => a -> a -> Ordering
compare (Found a -> a
forall a. Found a -> a
unFound Found a
f1) (Found a -> a
forall a. Found a -> a
unFound Found a
f2)