Qual è il modo migliore per verificare che una dichiarazione non sia corretta per il tipo? Con GADT, non è banale capire che un'applicazione di costruzione è corretta o meno. Se si sta scrivendo una libreria di costrutti sicuri per tipo è naturale assicurarsi che non sia possibile creare costrutti illegali. Quindi, come parte di una suite di test, voglio assicurarmi che alcuni esempi di costrutti illegali vengano rifiutati dal controllo del tipo.Haskell: come testare che il codice non si sta compilando?
Ad esempio, vedere una rappresentazione vettoriale a dimensione controllata. È molto più semplice dei tipici problemi che voglio decidere, ma è un buon esempio per verificare il metodo di test.
data Vector n t where
EmptyVec :: Vector 0 t
ConsVec :: t -> Vector n t -> Vector (n+1) t
// TODO: test that it does not typecheck
illegalVec = ConsVec 'c' (ConsVec "b" EmptyVec)
Probabilmente vorrai fare un "meta-test". Scrivi un piccolo script che tenta di compilare il tuo codice e assicura che il compilatore non esca con il codice 0. – Kris
Penso che tu stia cercando di implementare qualche tipo di tipi dipendenti qui, giusto? ... quali estensioni di lingua vuoi usare qui? Per ottenere che la prima parte funzioni affatto. – Carsten
@ CarstenKönig: 'TypeOperators',' GADTs', 'DataKinds' e un'importazione di' GHC.TypeLits'. –