
I'm trying to solve problem 22 of Euler Project. ( http://projecteuler.net/problem=22) I got file contents using " names <- readFile "names.txt" " in "do-block". When I try to use 'names' outside of "do-block", I get following error message; namesScores.hs:30:35: Not in scope: `names' Failed, modules loaded: none. Is there any other ways to use variables outside of the "do-block"? Sorry for taking your time. Thank you. My code is... ------------------------------------------------------------- import Data.List import Data.List.Split import Data.Char import Data.Maybe main :: IO() main = do names <- readFile "names.txt" print $ sum $ map (\x -> getPosition x * getScore x) names getPosition :: String -> Int getPosition x = fromMaybe 0 (elemIndex x sortedNamesList) + 1 getScore :: String -> Int getScore xs = sum $ map (\x -> ord x - 64) xs sortedNamesList :: [String] sortedNamesList = sort $ nameList names nameList :: String -> [String] nameList = split (dropDelims . dropBlanks $ oneOf ",\"") Error message is... ------------------------------------------------------------------ Prelude> :l namesScores.hs [1 of 1] Compiling Main ( namesScores.hs, interpreted ) namesScores.hs:31:35: Not in scope: `names' Failed, modules loaded: none.