module Path(showPath, subPath, absPath, path, turn, here, Path(..)) where import Direction import Utils(lhead) type Path = [Direction] here :: Path here :: Path here = [] turn :: Direction -> Path -> Path turn :: Direction -> Path -> Path turn Direction dir Path p = Direction dir Direction -> Path -> Path forall a. a -> [a] -> [a] : Path p path :: Path -> (Direction, Path) path :: Path -> (Direction, Path) path (Direction dir : Path p) = (Direction dir, Path p) path [] = [Char] -> (Direction, Path) forall a. HasCallStack => [Char] -> a error [Char] "path.m: path []" absPath :: Path -> Path -> Path absPath :: Path -> Path -> Path absPath Path absp Path relp = Path absp Path -> Path -> Path forall a. [a] -> [a] -> [a] ++ Path relp subPath :: Path -> Path -> Bool subPath :: Path -> Path -> Bool subPath Path subp Path p = Path -> Int forall (t :: * -> *) a. Foldable t => t a -> Int length Path subp Int -> Int -> Bool forall a. Ord a => a -> a -> Bool <= Path -> Int forall (t :: * -> *) a. Foldable t => t a -> Int length Path p Bool -> Bool -> Bool && Path -> Path -> Path forall a1 a2. [a1] -> [a2] -> [a2] lhead Path subp Path p Path -> Path -> Bool forall a. Eq a => a -> a -> Bool == Path subp showPath :: Path -> String showPath :: Path -> [Char] showPath = (Direction -> [Char]) -> Path -> [Char] forall (t :: * -> *) a b. Foldable t => (a -> [b]) -> t a -> [b] concatMap (\Direction x -> case Direction x of Direction L -> [Char] "L" Direction R -> [Char] "R" Dno Int n -> [Char] "N(" [Char] -> [Char] -> [Char] forall a. [a] -> [a] -> [a] ++ Int -> [Char] forall a. Show a => a -> [Char] show Int n [Char] -> [Char] -> [Char] forall a. [a] -> [a] -> [a] ++ [Char] ")")