packages feed

MicroHs-0.16.0.0: tests/TypeApp.hs

module TypeApp where
import Data.Typeable

foo :: forall a b . (a, b)
foo = (undefined, undefined)

xread :: forall a -> Read a => String -> a
xread t s = read s :: t

incr :: forall a -> Num a => a -> a
incr _ x = x + 1

incu :: () -> (forall a. Num a => a -> a)
incu _ x = x + 1

inci :: forall a . Num a => a -> forall b . (Num b, Integral b) => b -> a
inci x = (+) x . fromIntegral

sizeOf :: forall a -> Int
sizeOf _ = 0

constT :: forall a b -> a -> b -> a
constT _ _ a b = a

constT2 :: forall a -> a -> forall b -> b -> a
constT2 _ a _ b = a

main :: IO ()
main = do
  print $ read @Int "123"
  print $ xread Int "456"
  let (x, y) = foo @_ @Bool
  print $ typeOf y
  print (incr Int 41)
  print (incu () 41)
--  print (inci 1 41 :: Double)
  print (sizeOf Bool)
  print (constT Int Bool 1 False)
  print (constT2 Int 2 Bool True)
  return @IO ()