<div dir="ltr"><div class="gmail_extra"><div class="gmail_quote">On 20 April 2014 14:57, S. H. Aegis <span dir="ltr"><<a href="mailto:shaegis@gmail.com" target="_blank">shaegis@gmail.com</a>></span> wrote:<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">

<div dir="ltr">
<div>Is there any other ways to use variables outside of the "do-block"?</div></div></blockquote><div><br></div><div>You can pass the list of names as an argument where it is needed.</div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">

<div dir="ltr"><div></div><div>import Data.List<br></div><div><div>import Data.List.Split</div><div>import Data.Char</div><div>import Data.Maybe</div><div><br></div><div>main :: IO ()</div><div>main = do</div><div>    names <- readFile "names.txt"</div>


<div>    print $ sum $ map (\x -> getPosition names x * getScore x) names</div><div><br></div><div>getPosition :: [String] -> String -> Int</div><div>getPosition names x = fromMaybe 0 (elemIndex x $ sortedNamesList names) + 1</div>

<div><br></div><div>
getScore :: String -> Int</div><div>getScore xs = sum $ map (\x -> ord x - 64) xs</div><div><br></div><div>sortedNamesList :: [String] -> [String]</div><div>sortedNamesList names = sort $ nameList names</div><div>

<br></div><div>nameList :: String -> [String]</div>
<div>nameList = split (dropDelims . dropBlanks $ oneOf ",\"")</div></div></div></blockquote></div><br></div><div class="gmail_extra"><br></div></div>