2012-01-27 13 views
21

A menudo, cuando estoy jugando con el código Haskell, resuelvo cosas con una anotación de tipo y undefined.Indefinido en el tipo de nivel

foo :: String -> Int 
foo = undefined 

¿Hay algún tipo de nivel "indefinido" que pueda usar de forma similar?

(Idealmente, en conjunción con una especie de anotación)

type Foo :: * -> * 
type Foo = Undefined 

el pensamiento sobre el mismo tema: ¿hay una manera para mí para apagar los casos clase de tipos de tipos creados de esta manera? ¿Una forma aún más fácil que la siguiente forma teórica?

instance Monad Foo where 
    return = undefined 
    (>>=) = undefined 

Respuesta

24

Puede utilizar EmptyDataDecls a apagar un tipo, y con KindSignatures se puede dar una especie:

{-# LANGUAGE EmptyDataDecls, KindSignatures #-} 

data Foo :: * -> * 

También puede apagar la instancia Monad sin advertencias con esta opción para GHC.

{-# OPTIONS_GHC -fno-warn-missing-methods #-} 

instance Monad Foo 

Y entonces no es necesario salir de cualquier aplicación para return y >>=.

+1

¡Agradable! Exactamente lo que estaba buscando; ¡es aún más conveniente porque no tienes que escribir 'Foo = Indefinido'! ¡Y buenas firmas! Salsa impresionante. –

+0

Creo que no es lo mismo que un alias de tipo: cuando introduce un nuevo dato, no hay posibilidad de que 'Foo a = a'. Entonces, no es lo mismo que el código de la pregunta, que puede estar bien. – gatoatigrado

+0

@gatoatigrado: Creo que el requisito era solo un marcador de posición para un tipo aún por escribir, no un alias tipo per se, y entonces esta es una solución adecuada. De todos modos, me alegro de ayudarte Dan! – danr

Cuestiones relacionadas