    module NLP.Minimorph.Number where

    -- | Singular and Plural.
    data SingPlu a = SP
        { forall a. SingPlu a -> a
    sg :: a
        , forall 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
    $cshowsPrec :: forall a. Show a => Int -> SingPlu a -> ShowS
    showsPrec :: Int -> SingPlu a -> ShowS
    $cshow :: forall a. Show a => SingPlu a -> String
    show :: SingPlu a -> String
    $cshowList :: forall a. Show a => [SingPlu a] -> ShowS
    showList :: [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
    $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
    /= :: 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
    $c== :: Number -> Number -> Bool
    == :: Number -> Number -> Bool
    $c/= :: Number -> Number -> Bool
    /= :: 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
    $cshowsPrec :: Int -> Number -> ShowS
    showsPrec :: Int -> Number -> ShowS
    $cshow :: Number -> String
    show :: Number -> String
    $cshowList :: [Number] -> ShowS
    showList :: [Number] -> ShowS
    Show)

    fromSP :: Number -> SingPlu a -> a
    fromSP :: forall a. 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