module Tests.Src.Test_ADT where import Data.Char data Single = Single { sint :: Int , schar :: Char } data Multi = Demi { mints :: [Int] , mstring :: String -- avoid [Char] } | Semi { semi :: [Single] } newtype SiMu = SiMu { semu :: Single -> Multi } -- @@ Export -- | Create a Single payload mkSingle :: Int -> Single mkSingle x = Single x (chr x) -- @@ Export -- | Maybe create a Single payload -- to illustrate specialization mkMaybeSingle :: Int -> Maybe Single mkMaybeSingle x | x >= 97 && x <= 122 = return (mkSingle x) mkMaybeSingle _ = Nothing -- @@ Export -- | Creating a Multi datatype from -- a single datatype via callback mkSingleCallback :: Int -> (Single -> Multi) -> Multi mkSingleCallback x f = f (mkSingle x) -- @@ Export -- | Same as mkSingleCallback but with a SiMu mkSiMu :: SiMu mkSiMu = SiMu { semu = \x -> Semi [x] }