E 'possibile implementare una classe tipo come segue: class SomeClass e where
isEq :: (SomeClass e') => e -> e' -> Bool
dove isEq x y otterrebbe true quando x e y sono entrambi la stessa istanz
Per prima cosa, ho iniziato con alcuni tipi di numeri naturali tipici di tipo livello. {-# LANGUAGE KindSignatures #-}
{-# LANGUAGE DataKinds #-}
{-# LANGUAGE GADTs #-}
{-# LANGUAGE TypeFamilies #-
La mia domanda è probabilmente più facile da spiegare, sotto forma di un esempio: type family Take (n :: Nat) (xs :: [k]) :: [k]
type instance Take 0 xs = '[]
type instance Take (n+1) (x ': xs) =