From 2d079b5873d598d088b7b906e2ca0f27ef78c204 Mon Sep 17 00:00:00 2001 From: VegOwOtenks Date: Sun, 13 Jul 2025 11:57:08 +0200 Subject: [PATCH] feat[types]: ConstantPool uses GADT instead of data family --- src/Language/Java/Classfile/ConstantPool.hs | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/src/Language/Java/Classfile/ConstantPool.hs b/src/Language/Java/Classfile/ConstantPool.hs index 9f2fab3..a0cf35d 100644 --- a/src/Language/Java/Classfile/ConstantPool.hs +++ b/src/Language/Java/Classfile/ConstantPool.hs @@ -8,6 +8,8 @@ {-# LANGUAGE DataKinds #-} {-# LANGUAGE TypeFamilies #-} {-# LANGUAGE FlexibleInstances #-} +{-# LANGUAGE GADTs #-} +{-# LANGUAGE StandaloneDeriving #-} module Language.Java.Classfile.ConstantPool (ConstantPool(..)) where import Data.Word (Word16) import Data.Array.IArray (Array, listArray) @@ -18,15 +20,15 @@ import qualified Data.Text as Text import Language.Java.Classfile.Stage (Stage(..)) import Data.Kind (Type) +type ConstantPool :: Stage -> Type +data ConstantPool stage where + ConstantPool :: (Array Word16 Entry) -> ConstantPool Parse + NoPool :: ConstantPool Resolve + +deriving instance Show (ConstantPool stage) + -- | 'Stage'-indexed constant-pool. The constant-pool is erased after resolving the class file. -type ConstantPool :: Stage -> Type -data family ConstantPool stage - -newtype instance ConstantPool Parse = ConstantPool (Array Word16 Entry) - deriving stock (Show) - -data instance ConstantPool Resolve = NoPool instance Extractable (ConstantPool Parse) where extract :: Extract (ConstantPool Parse)