packages feed

stacked-dag-0.1.1.0: app/Main.hs

{-# LANGUAGE CPP #-}
module Main where

import StackedDag
import Options.Applicative
import qualified Data.Text.Lazy.IO as T

data Command =
    Dot FilePath
  | Samples

fromdot :: Parser Command
fromdot = Dot
         <$> (argument str (metavar "DotFile"))

samples :: Parser Command
samples = pure Samples

parse :: Parser Command
parse = subparser $
        command "dot" (info fromdot (progDesc "convert graphviz-dot-file to ascii-dag")) `mappend`
        command "samples" (info samples (progDesc "show samples"))


mkLabels' :: [(Int,String)] -> Labels Int String
mkLabels' = mkLabels

runCmd :: Command -> IO ()
runCmd (Dot ifile) = do
  v <- T.readFile ifile
  T.putStr $ genAsciiFromDot v

runCmd (Samples) = do
  putStr $ edgesToText samplelabels sampledat
  putStrLn "---"
  putStr $ edgesToText ( mkLabels' [
                           (0,"l0"),
                           (1,"l1"),
                           (2,"l2"),
                           (3,"l3")
                    ]) ( mkEdges [
                           (0,[3]),
                           (1,[2])
                           ])
  putStrLn "---"
  putStr $ edgesToText ( mkLabels' [
                           (0,"l0"),
                           (1,"l1"),
                           (2,"l2"),
                           (3,"l3")
                    ]) ( mkEdges [
                           (0,[1,2,3])
                           ])
  putStrLn "---"
  putStr $ edgesToText ( mkLabels' [
                           (0,"l0"),
                           (1,"l1"),
                           (2,"l2"),
                           (3,"l3"),
                           (4,"l4")
                    ]) ( mkEdges [
                           (0,[4]),
                           (1,[4]),
                           (2,[4]),
                           (3,[4])
                           ])
  putStrLn "---"
  putStr $ edgesToText ( mkLabels' []) ( mkEdges [
                                          (0,[1,2]),
                                          (1,[2])
                                          ])
  putStrLn "---"
  putStr $ edgesToText ( mkLabels' []) ( mkEdges [
                                          (0,[1,3]),
                                          (1,[2]),
                                          (2,[3])
                                          ])

sampledat :: Edges Int
sampledat = mkEdges [
  (0,[2]),
  (1,[2]),
  (2,[3]),
  (4,[3]),
  (6,[3]),
  (3,[5])
  ]

samplelabels :: Labels Int String
samplelabels = mkLabels [
  (0,"l0"),
  (1,"l1"),
  (2,"l2"),
  (3,"l3"),
  (5,"l5"),
  (4,"l4"),
  (6,"l6")
  ]

opts :: ParserInfo Command
opts = info (parse <**> helper) idm

main :: IO ()
main = execParser opts >>= runCmd