{-| 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)