J'essaie de récupérer des données d'un fichier, de les analyser et de les transmettre à une autre fonction comme argument.
data LogLine = LogLine {
name :: String
, args1 :: String
, args2 :: String
, constant :: String
} deriving (Ord, Show, Eq)
main = do
file <- readFile "foo"
let result = (parse final "Input" file) --Parses the file into the LogLine datatype
let firstargs = getFirstArgs result --Get the first argument out of the datatype
let secondargs = getSecondArgs result --Get the second argument out of the datatype
let constant = getConstant result --Get the constant out of the datatype
createGraph firstargs secondargs constant --THIS IS THE PROBLEM
Le problème est qu'à chaque fois que j'essaie de lire un fichier, il devient un (IO String) et je dois toujours reporter l'IO quoi que je fasse. Le site createGraph
est déclarée comme
createGraph :: String -> String -> String -> Argument
mais dès que j'essaie d'exécuter la dernière instruction, il se plaint :
Couldn't match expected type `IO a0' with actual type `Argument'
In the return type of a call of `createGraph'
Je n'ai pas le droit de changer le type de retour de la fonction createGraph
parce qu'elle fait partie d'une grande structure à laquelle je dois fournir les arguments. Quels sont les moyens de faire face à ce problème ?