packages feed

parsestar-1.4: test/TestChemShifts.hs

{-# LANGUAGE OverloadedStrings, ScopedTypeVariables #-}
module Main(main)
where

import System.Environment(getArgs, getProgName)
import System.IO(hPrint, hPutStr, hPutStrLn, stderr)
import Data.Binary
import System.Exit(exitFailure, exitSuccess)
import Control.Monad(when)

import Data.STAR.ChemShifts(ChemShift(..), parse)

printUsage = do prog <- getProgName
                hPutStrLn stderr $ usageStr prog
  where
    usageStr prog = concat ["Usage: ", prog, " <input.str> <output.cs>"]

main = do l <- length `fmap` getArgs
          when (l /= 2) $ do printUsage
                             exitFailure
          [input, output] <- getArgs
          dat <- parse input
          case dat of
            Left  err    -> do hPutStr stderr $ "Error parsing " ++ input ++ ": "
                               hPutStrLn stderr err
                               exitFailure
            Right parsed -> do putStrLn $ concat ["Parsed ", show $ length parsed, " chemical shifts."]
                               Data.Binary.encodeFile output (parsed :: [ChemShift])
                               exitSuccess