haskell polymorphism

Definiendo constantes polimórficas en Haskell



polymorphism (2)

He leído sobre constantes polimórficas / funciones polimórficas nulas en Learn You A Haskell . Dio varios ejemplos de incorporados, tales como:

ghci> 20 :: Float 20.0 ghci> 20 :: Int 20 ghci> minBound :: Int -2147483648 ghci> maxBound :: (Bool, Int, Char) (True,2147483647,''/1114111'')

Sin embargo, no explica cómo definir el suyo propio. ¿Cómo se definen?


Debe crear una clase de tipos que incluya las funciones / constantes que desee, cada una con un tipo de retorno variable. Instálalo para cada tipo que desees que puedan ser tus constantes.

class MyConstants a where one :: a ten :: a instance MyConstants Int where one = 1 ten = 10 instance MyConstants Float where one = 1.0 ten = 10.0 instance MyConstants String where one = "one" ten = "ten"

Ejemplo de uso ( codepad )

main = do putStrLn . show $ (ten :: Int) putStrLn . show $ (one :: String) putStrLn . show $ (ten :: Float) + one putStrLn . show $ "Count from " ++ one ++ " to " ++ ten

10 "one" 11.0 "Count from one to ten"


Primero, recomiendo no usar el término "constante" para significar no funciones, ya que todos los valores son constantes (inmutables), ya sea que esos valores sean funciones (es decir, tengan tipo de función) o no.

Ni siquiera necesita clases de tipos para tener funciones no polimórficas. Un ejemplo es [] . Para definir sus propias funciones no polimórficas, puede definir un tipo de datos (como en el ejemplo de lista) o construir algo a partir de piezas ya definidas. Por ejemplo: empties = ([],[[]]) .