packages feed

Hach-0.1.0: client/Client/Args.hs

{-# LANGUAGE UnicodeSyntax #-}

module Client.Args (parseArgs) where

import System.Console.GetOpt

data Flag = ServerIP String
          | ClientNick String

options ∷ [OptDescr Flag]
options =
  [ Option "s" ["server"] (ReqArg ServerIP "server_ip") "set server ip adress"
  , Option "n" ["nick"] (ReqArg ClientNick "user nickname") "set user nickname"
  ]

parseArgs ∷ [String] → IO (String, String)
parseArgs argv = case getOpt Permute options argv of
  (os, _, []) → do
    let ips = [ s | ServerIP s ← os ]
    let nicks = [ n | ClientNick n ← os ]
    case (ips, nicks) of
      ([ip], [nick]) → return (ip, nick)
      (_, _) → error $ usageInfo usage options
  (_, _, es) → error $ concat es ++ usageInfo usage options
  where usage = "Usage: hach-client [OPTIONS...]"