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).