haskell types typechecking

haskell - Comprobación de un constructor de datos particular



types typechecking (2)

Digamos que definí mi propio tipo de datos: me gusta

data MyData = A arg| B arg2| C arg3

¿Cómo escribiría una función (por ejemplo: isMyDataType ) que verifica si el argumento dado es uno de los tipos particulares en MyData y sucesivamente devuelve un booleano (verdadero o falso), por ejemplo, escribiendo en Ghci: isMyDataType B devuelve True e isMyDataType Int devuelve False


Haskell siempre verifica que los tipos tengan sentido. El compilador se quejaría inmediatamente si escribiera isMyDataType 4 , porque 4 no es del tipo MyData , es del tipo Int .

No estoy seguro de que esto sea lo que pediste, pero de cualquier forma te sugiero que pruebes lo que has preguntado aquí en la práctica, para que puedas verlo por ti mismo. Lo más importante es que revises las firmas de tipo en haskell, es clave para aprender haskell.


Creo que quieres funciones para probar constructores particulares:

isA :: MyData -> Bool isB :: MyData -> Bool

Si es así, entonces puede escribirlos usted mismo o derivarlos. La implementación se vería así:

isA (A _) = True isA _ = False isB (B _) = True isB _ = False

Para derivarlos automáticamente, solo use la biblioteca derivada y agregue, en su código fuente:

{-# LANGUAGE TemplateHaskell #-} import Data.DeriveTH data MyData = ... deriving (Eq, Ord, Show} derive makeIs ''''MyData -- Older GHCs require more syntax: $( derive makeIs ''''MyData)

También tenga en cuenta: su declaración de datos no es válida, el nombre debe estar en mayúscula, MyData lugar de myData .

Finalmente, toda esta respuesta se basa en la suposición de que desea probar constructores, no tipos de datos como usted dijo (que están marcados estáticamente en tiempo de compilación, como dijo Tarrasch).