module NLP.Minimorph.Number where

-- | Singular and Plural.
data SingPlu a = SP
    { SingPlu a -> a
sg :: a
    , SingPlu a -> a
pl :: a
    }
  deriving (Int -> SingPlu a -> ShowS
[SingPlu a] -> ShowS
SingPlu a -> String
(Int -> SingPlu a -> ShowS)
-> (SingPlu a -> String)
-> ([SingPlu a] -> ShowS)
-> Show (SingPlu a)
forall a. Show a => Int -> SingPlu a -> ShowS
forall a. Show a => [SingPlu a] -> ShowS
forall a. Show a => SingPlu a -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [SingPlu a] -> ShowS
$cshowList :: forall a. Show a => [SingPlu a] -> ShowS
show :: SingPlu a -> String
$cshow :: forall a. Show a => SingPlu a -> String
showsPrec :: Int -> SingPlu a -> ShowS
$cshowsPrec :: forall a. Show a => Int -> SingPlu a -> ShowS
Show, SingPlu a -> SingPlu a -> Bool
(SingPlu a -> SingPlu a -> Bool)
-> (SingPlu a -> SingPlu a -> Bool) -> Eq (SingPlu a)
forall a. Eq a => SingPlu a -> SingPlu a -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: SingPlu a -> SingPlu a -> Bool
$c/= :: forall a. Eq a => SingPlu a -> SingPlu a -> Bool
== :: SingPlu a -> SingPlu a -> Bool
$c== :: forall a. Eq a => SingPlu a -> SingPlu a -> Bool
Eq)

data Number = Singular | Plural
  deriving (Number -> Number -> Bool
(Number -> Number -> Bool)
-> (Number -> Number -> Bool) -> Eq Number
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: Number -> Number -> Bool
$c/= :: Number -> Number -> Bool
== :: Number -> Number -> Bool
$c== :: Number -> Number -> Bool
Eq, Int -> Number -> ShowS
[Number] -> ShowS
Number -> String
(Int -> Number -> ShowS)
-> (Number -> String) -> ([Number] -> ShowS) -> Show Number
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [Number] -> ShowS
$cshowList :: [Number] -> ShowS
show :: Number -> String
$cshow :: Number -> String
showsPrec :: Int -> Number -> ShowS
$cshowsPrec :: Int -> Number -> ShowS
Show)

fromSP :: Number -> SingPlu a -> a
fromSP :: Number -> SingPlu a -> a
fromSP Number
Singular = SingPlu a -> a
forall a. SingPlu a -> a
sg
fromSP Number
Plural   = SingPlu a -> a
forall a. SingPlu a -> a
pl