braid-0.1.0.0: src/Parse.hs
{-|
Module : Parse
Description : Reads commandline input and prints Morphisms nicely.
Copyright : Adam Saltz
License : BSD3
Maintainer : saltz.adam@gmail.com
Stability : experimental
Longer description to come.
-}
module Parse
where
import Braids
import Complex
import Kh
import qualified Data.Map as M (toList)
import Data.Set (Set)
import qualified Data.Set as S (toList)
import Data.List (sortBy)
import Data.List.Split (splitOneOf)
-- | Parse command line input into a braid.
-- | e.g. @Parse "[1,2,-2,-3] 4" == Braid [1,2,-2,-3] 4f
parse :: [String] -> Braid
parse input = braid where
braid = Braid {braidWord = parseWord word, braidWidth = width}
parseWord = fmap (read :: String -> Int) . filter (not . null) . splitOneOf ",]["
(word, width) = (input !! 0, read $ input !! 1 :: Int)
-- | Prints kappa in a nice way.
showKappa' :: Maybe (Int, Morphisms) -> [String]
showKappa' s = case s of
Nothing -> ["Psi doesn't vanish!"]
Just (kappa, mors) -> ("Kappa is " ++ show kappa) : showMorphisms mors
-- | Prints Morphisms nicely.
showMorphisms :: Morphisms -> [String]
showMorphisms mors = fmap fst
. sortBy (\(i, _) (i',_) -> compare i i')
. fmap showMorphism
. M.toList
$ mors
-- | Prints a single morphism nicely.
showMorphism :: (AlgGen, Set AlgGen) -> (String, Int)
showMorphism (gs,gs') = ( "Filtration level: " ++ show (kgrade' gs) ++ ".\n"
++ show (S.toList . toSet $ gs) ++ "\n"
++ "|\n"
++ "|\n"
++ "|\n"
++ "V\n"
++ show (S.toList gs') ++ "\n\n"
, kgrade' gs)