{-# LANGUAGE TypeApplications #-}

module Spec.Data where

import Data.Typeable (Proxy(Proxy), TypeRep, typeRep)
import Managed hiding (typeRep)

data MyData
  = A
  | B
  | C
  deriving (Show, Read, Eq)

nullary :: MyData
nullary = A

probeN :: Probe SR
probeN = toProbe nullary

unary :: MyData -> MyData
unary _ = B

probeU :: Probe SR
probeU = toProbe unary

binary :: MyData -> MyData -> MyData
binary _ _ = C

probeB :: Probe SR
probeB = toProbe binary

unaryIO :: MyData -> IO MyData
unaryIO = return

probeIO :: Probe SR
probeIO = toProbe unaryIO

probeIntCharStr :: Probe SR
probeIntCharStr =
  toProbe (replicate :: Int -> Char -> [Char])

int :: TypeRep
int = typeRep (Proxy @Int)

char :: TypeRep
char = typeRep (Proxy @Char)

intChar :: TypeRep
intChar = typeRep (Proxy @(Int -> Char))

intCharChar :: TypeRep
intCharChar = typeRep (Proxy @(Int -> Char -> Char))