parseLine :: String -> String -> IO Int
parseLine function str
    = -- words isn't necessarily quite right, e.g. we could have
    -- "var=" rather than "var =", but it works for the code
    -- we have
    case words str of
    _var : "=" : fun : numStr : rest
     | fun == function,
       null rest || "--" == head rest,
       [(num, "")] <- reads numStr
          -> return num
    _ -> error ("Bad line: " ++ show str)
parseLine :: String -> String -> IO Int
parseLine function str
    = -- words isn't necessarily quite right, e.g. we could have
    -- "var=" rather than "var =", but it works for the code
    -- we have
    case words str of
    _var : "=" : fun : numStr : rest
     | fun == function,
       null rest || "--" == head rest,
       [(num, "")] <- reads numStr
          -> return num
    _ -> error ("Bad line: " ++ show str)
parseLine function str
    = -- words isn't necessarily quite right, e.g. we could have
    -- "var=" rather than "var =", but it works for the code
    -- we have
    case words str of
    _var : "=" : fun : numStr : rest
     | fun == function,
       null rest || "--" == head rest,
       [(num, "")] <- reads numStr
          -> return num
    _ -> error ("Bad line: " ++ show str)