
Hi Haskell people, I'm pretty new to Haskell still. There were a bunch of things I didn't know how to do in the following script, I'm hoping some people on this list can help with. For example, I had trouble returning an ExitCode and using getProgName without getting a compile-time type error. I feel like I'm doing something wrong with the Text/[Char] conversions too. I'd also really appreciate any style tips. Thanks in advance! {-# LANGUAGE OverloadedStrings #-} module Main where import System (getArgs) import System.IO (hPutStrLn, stderr) import Data.Text (pack, splitOn, length, isPrefixOf, Text) import Prelude hiding (length) data Rate = Rate Text Text deriving (Show) findBestPrefix number rates = foldl1 longestPrefix $ matching rates where getLength rate = length $ getPrefix rate getPrefix (Rate prefix _) = prefix getPrice (Rate _ price) = price longestPrefix r1 r2 = if getLength r1 > getLength r2 then r1 else r2 matching rates = [ rate | rate <- rates, getPrefix rate `isPrefixOf` number ] makeRates = map $ \line -> let (prefix:rate:_) = splitOn ", " (pack line) in Rate prefix rate main = getArgs >>= \args -> let findBest number rates = findBestPrefix number $ makeRates rates in case args of (arg:_) -> interact $ (++ "\n") . show . findBest (pack arg) . lines _ -> hPutStrLn stderr "Pass in a number as the first argument" -- neuman