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