{-# LANGUAGE DataKinds #-} {-# LANGUAGE ExistentialQuantification #-} {-# LANGUAGE ScopedTypeVariables #-} {-# LANGUAGE TypeFamilies #-} {-# LANGUAGE FlexibleContexts #-} module Ivory.Language.String where import Ivory.Language.Area import Ivory.Language.Array import Ivory.Language.Struct import Ivory.Language.Uint import GHC.TypeLits class ( SingI (Capacity a) , IvoryStruct (StructName a) , IvoryArea a , a ~ Struct (StructName a) ) => IvoryString a where type Capacity a :: Nat stringDataL :: Label (StructName a) (Array (Capacity a) (Stored Uint8)) stringLengthL :: Label (StructName a) (Stored (Ix (Capacity a)))