packages feed

open-typerep-0.3.1: examples/Simple.hs

import Control.Monad

import Data.TypeRep

type MyUniverse = IntType :+: BoolType

hlist :: [Dynamic MyUniverse]
hlist = [toDyn True, toDyn (1 :: Int)]
  -- Prints: [True,1]

addDyn :: (TypeEq ts ts, PWitness Num ts ts) =>
    Dynamic ts -> Dynamic ts -> Either String (Dynamic ts)
addDyn (Dyn ta a) (Dyn tb b) = do
    Dict <- typeEq ta tb
    Dict <- pwit pNum ta
    return (Dyn ta (a+b))



test1 = toDyn (1 :: Int) `addDyn` toDyn (2 :: Int)
  -- Prints: Just 3

main = do
    unless t1 $ fail "Test 1 failed"
    unless t2 $ fail "Test 2 failed"
    putStrLn "All tests passed"
  where
    t1 = show hlist == "[True,1]"
    t2 = show (test1 :: Either String (Dynamic MyUniverse)) == "Right 3"