Utilizando "Quizás" de Haskell, escriba las declaraciones [pregunta del principiante]
Empecé a experimentar con Haskell y tengo un problema. qqq es una función que debería imprimir una cadena si se llama con "Nothing" e imprimir otras cosas si se llama con "Just something".
El primer intento parece funcionar:
qqq Nothing = print "There isn't anything to be printed."
qqq (Just x) = print "There is something to be printed." >> print x
main :: IO ()
main = qqq (Just 43)
Pero
cuando trato de hacermain = qqq (Nothing)
falla ("Variable de tipo ambiguo` a0 'en la restricción: (Mostrar a0) que surge del uso de' qqq '")Cuando quiero agregar la firma de tipo si falla:qqq :: Maybe x => x -> IO ()
->Type constructor 'Maybe' used as a class
-> ¿Pero no es así?qqq :: (Maybe x) -> IO ()
. Ahora la firma en sí parece tener éxito. Peromain = qqq (Just 43)
comienza a fallar con esa misteriosa(Show a0)
error como enmain = qqq (Nothing)
case.Preguntas:
Por qué llamar a qqq conNothing
es muy diferente a llamar conJust 43
?Que es(Show a0)
? Solo se menciona en los mensajes de error. Cualquier intento de usarlo conduce a algo como "Mostrar no en el alcance". ¿Cuál es la firma de tipo correcta para esto? ¿Cómo hacer la firma del tipo de impresión Haskell que dedujo? Esperando algo como:f 0 = 2
f x = (f (x-1)) + 3
main = print get_type_as_string(f)
-- prints "Number -> Number"