2011-06-04 10 views
9

¿Es posible crear un tipo con un argumento numérico?Firma de tipo numérico

es decir, si quiero crear un tipo de números enteros con un poco de ancho fijo:

newtype FixedWidth w = FixedWidth Integer 

addFixedWidth :: FixedWidth w -> FixedWidth w -> FixedWidth (w+1) 
mulFixedWidth :: FixedWidth w -> FixedWidth w -> FixedWidth (2*w) 

modo que el tipo ortográfico sólo permite que se añaden o se multiplicaron FixedWidth s del mismo tipo, pero también determina la precisión correcta del resultado.

Sé que usted puede hacer algo como esto:

data Nil = Nil 
data Succ x = Succ 

addFixedWidth :: FixedWidth w -> FixedWidth w -> FixedWidth (Succ w) 

y representan el número 4 como , pero eso es muy feo. También necesito averiguar cómo agregar dos Succ s para el tipo de resultado multiplicado.

Respuesta

10

La característica que está buscando es naturales de nivel de tipo, conocida como la extensión -XTypeNats de Haskell.

Por el momento esto es posiblemente solo en una rama experimental de GHC. Es probable que se fusione en GHC por 7,4, creo.

leer un poco más lejos:

+0

Quiso decir 7.0.4? – pat

Cuestiones relacionadas