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 :: [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)
showKappa' :: Maybe (Int, Morphisms) -> [String]
showKappa' s = case s of
Nothing -> ["Psi doesn't vanish!"]
Just (kappa, mors) -> ("Kappa is " ++ show kappa) : showMorphisms mors
showMorphisms :: Morphisms -> [String]
showMorphisms mors = fmap fst
. sortBy (\(i, _) (i',_) -> compare i i')
. fmap showMorphism
. M.toList
$ mors
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)