Estoy tratando de poner una llamada de función 'imprimir' en una función haskell.haskell: error al intentar llamar a putStrLn en la función
(un mensaje de depuración simple).
A continuación se muestra mi código y mensaje de error del compilador (ghc 6.10).
No entiendo por qué está agrupando la llamada puttr y la matriz vacía.
La matriz vacía es el valor de retorno para ese caso en particular (el mensaje de impresión es en realidad solo un stub por ahora).
¿Alguna idea de por qué esto no funciona?
Gracias
Mi Código:
isAFactor :: Integer -> Integer -> Bool isAFactor x y = x `mod` y == 0 findFactors :: Integer -> Integer -> [Integer] findFactors counter num = let quotient = div num 2 in if(counter > quotient) then do putStrLn ("factorList is : " ++ show quotient) (*** Line 10***) [] else if(isAFactor num counter) then [counter] ++ [quotient] ++ findFactors (counter + 1) num else findFactors (counter + 1) num
error de GHC
test.hs:10:4: Couldn't match expected type `[a] -> [Integer]' against inferred type `IO()' In the expression: putStrLn ("factorList is : " ++ show quotient) [] In the expression: do putStrLn ("factorList is : " ++ show quotient) [] In the expression: if (counter > quotient) then do putStrLn ("factorList is : " ++ show quotient) [] else if (isAFactor num counter) then [counter] ++ [quotient] ++ findFactors (counter + 1) num else findFactors (counter + 1) num
Creo que esto se debe a que findFactors es una función pura, por lo que no puede tener efectos secundarios (como IO). De esto se trata Haskell. Aunque no tengo idea de cómo proceder para depurar tu función. En C++ utilizo el registro de depuración todo el tiempo. –
"do" no significa lo que piensas que significa. Es solo azúcar de sintaxis para la secuenciación de mónadas; no puedes "hacer" nada en Haskell. :-) – ShreevatsaR