From d0325149f93f6553c766622352a8eaae41b6cd3b Mon Sep 17 00:00:00 2001 From: Tom Smeding Date: Wed, 11 Sep 2024 21:05:36 +0200 Subject: Allow some manual testing at the very least --- test/Main.hs | 38 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) create mode 100644 test/Main.hs (limited to 'test') diff --git a/test/Main.hs b/test/Main.hs new file mode 100644 index 0000000..19f56e2 --- /dev/null +++ b/test/Main.hs @@ -0,0 +1,38 @@ +{-# LANGUAGE DataKinds #-} +{-# LANGUAGE GADTs #-} +{-# LANGUAGE LambdaCase #-} +{-# LANGUAGE StandaloneDeriving #-} +{-# LANGUAGE TypeApplications #-} +{-# LANGUAGE TypeFamilies #-} +module Main where + +import qualified Data.Dependent.EnumMap.Strict as DE +import Data.Dependent.Sum +import Data.Some + + +data Tag = A | B | C + deriving (Show) + +data STag tag where + SA :: STag A + SB :: STag B + SC :: STag C +deriving instance Show (STag tag) + +instance DE.Enum1 STag where + type Enum1Info STag = () + fromEnum1 = \case { SA -> (0, ()); SB -> (1, ()); SC -> (2, ()) } + toEnum1 n () = case n of { 0 -> Some SA; 1 -> Some SB; 2 -> Some SC; _ -> error "invalid tag" } + +data Value tag where + VA :: Int -> Value A + VB :: Bool -> Value B + VC :: String -> Value c +deriving instance Show (Value tag) + + +main :: IO () +main = do + print $ DE.fromList @STag @Value [] + print $ DE.fromList [SB :=> VB False, SA :=> VA 3] -- cgit v1.2.3-70-g09d2