packages feed

Hs2lib-0.4.8: Tests/Src/Test_ADT.hs

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] }