Soy un lingüista que trabaja en la sintaxis/semántica formal de las lenguas naturales. Empecé con usando Haskell hace poco y muy pronto me di cuenta de que necesitaba agregar subtipado. Por ejemplo, dados los tipos Humanos y Animal, Me gustaría tener Humanos como un subtipo de Animal. Descubrí que esto es posible usando una función de coerción donde las instancias son declaradas por el usuario, pero no sé cómo definir coerción en las instancias que me interesan. Así que, básicamente, no sé qué agregar después de 'coerce = 'para que funcione'. Aquí está el código hasta ese momento:Subtipos para los tipos de lenguaje natural
{-# OPTIONS
-XMultiParamTypeClasses
-XFlexibleInstances
-XFunctionalDependencies
-XRankNTypes
-XTypeSynonymInstances
-XTypeOperators
#-}
module Model where
import Data.List
data Animal = A|B deriving (Eq,Show,Bounded,Enum)
data Man = C|D|E|K deriving (Eq,Show,Bounded,Enum)
class Subtype a b where
coerce :: a->b
instance Subtype Man Animal where
coerce=
animal:: [Animal]
animal = [minBound..maxBound]
man:: [Man]
man = [minBound..maxBound]
Gracias de antemano
Si realmente necesita subtipos, a continuación, utilizar un lenguaje que lo soporta. Así que estás buscando lenguajes híbridos OO-funcionales. Sugiero echarle un vistazo a Scala, que tiene la mayoría de las características que tiene Haskell (un poco más detallado) y un excelente sistema de tipo OO. Tener subtipos en Haskell es ciertamente posible, pero es solo una muleta. – Landei