packages feed

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