Я хотел бы использовать окна изображений существующего размера по нескольким причинам:
- Я хотел бы упаковать окна разных размеров в один и тот же список.
- I 'Я хотел бы сделать экземпляр
Zip
для моего типа окна.
Я использую этот код для этого:
-- | A "matrix" represented as a composition of sized vectors.
type Mat h w = Vector h :.: Vector w
-- | A handy alias for locating a window in the 2D plane.
type Orig = (Integer,Integer)
-- | An attempt at using `singletons` to define windows.
data Wind :: Nat -> Nat -> Type -> Type where -- height -> width
Wind
:: (KnownNat h, KnownNat w)
=> { img :: Mat h w a -- ^ image data matrix
, ll :: Orig -- ^ position of lower-left corner
, dflt :: a -- ^ out-of-bounds value
} -> Wind h w a
data SomeWind a :: Type where
MkSomeWind :: Sing h -> Sing w -> Wind h w a -> SomeWind a
Теперь мне нужно сделать HasRep
экземпляр для моего SomeWind
типа:
import qualified ConCat.Rep as R
instance R.HasRep (SomeWind a) where
type Rep (SomeWind a) = ???
repr (MkSomeWind _ _ (Wind im orig def)) = (im, (orig, def))
abst (im :: (Vector h :.: Vector w) a, (orig, def)) =
MkSomeWind (SNat :: Sing h) (SNat :: Sing w) (Wind im orig def)
У меня есть подозрение, что я должен иметь возможность использовать библиотеку singletons , чтобы помочь мне заменить "???"выше с правильным определением, но я не могу понять, как.
Кто-нибудь может помочь?