{-# LANGUAGE ImpredicativeTypes #-}
{-# LANGUAGE UnicodeSyntax #-}
module HGeometry.Properties(
Dimension
, NumType
) where
import Data.Kind (Type)
import Data.List.NonEmpty (NonEmpty)
import GHC.TypeNats
import HGeometry.Ext
import HGeometry.ByIndex
type family Dimension t :: Nat
type family NumType t :: Type
type instance NumType (core :+ extra) = NumType core
type instance Dimension (core :+ extra) = Dimension core
type instance NumType [t] = NumType t
type instance Dimension [t] = Dimension t
type instance Dimension (NonEmpty g) = Dimension g
type instance NumType (NonEmpty g) = NumType g
type instance NumType (Maybe a) = NumType a
type instance Dimension (Maybe a) = Dimension a
type instance NumType (Either l r) = NumType r
type instance NumType (ByIndex ix a) = NumType a
type instance Dimension (ByIndex ix a) = Dimension a