Hs2lib-0.4.8: ListTest.hs
{- @@ IMPORT "Data.IORef" "Foreign.StablePtr" @@ -}
module ListTest where
import Data.Char ( chr )
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] }