haskell - Indefinido a nivel de tipo
types undefined (2)
A menudo, cuando juego con el código Haskell, apago las cosas con una anotación de tipo y undefined
.
foo :: String -> Int
foo = undefined
¿Hay un nivel de tipo "indefinido" que pueda usar de manera similar?
(Idealmente, en conjunción con una anotación amable)
type Foo :: * -> *
type Foo = Undefined
Pensamiento adicional en el mismo hilo: ¿hay alguna manera de que yo apague instancias de typeclass para los tipos creados de esta manera? ¿Una forma aún más fácil que la siguiente manera teórica?
instance Monad Foo where
return = undefined
(>>=) = undefined
Esta pregunta fue formulada y contestada hace mucho tiempo; las mejores prácticas han evolucionado desde entonces.
En estos días, en lugar de undefined
, para el código de apéndice, debe utilizar orificios escritos y sus firmas de tipo parcial , analógicas y de nivel de tipo .
Puede usar EmptyDataDecls
para eliminar un tipo, y con KindSignatures
puede darle un tipo:
{-# LANGUAGE EmptyDataDecls, KindSignatures #-}
data Foo :: * -> *
También puede apagar la instancia de Monad
sin advertencias con esta opción para GHC.
{-# OPTIONS_GHC -fno-warn-missing-methods #-}
instance Monad Foo
Y luego no es necesario dejar ninguna implementación para return
y >>=
.