module System.Path.Internal.Part where import qualified System.Path.Internal.Component as PC import System.Path.Internal.Component (Component(Component), GenComponent) import Control.DeepSeq (NFData(rnf)) newtype Abs = Abs GenComponent data Rel = Rel data AbsRel = AbsO GenComponent | RelO absPC :: String -> Abs absPC :: String -> Abs absPC = GenComponent -> Abs Abs (GenComponent -> Abs) -> (String -> GenComponent) -> String -> Abs forall b c a. (b -> c) -> (a -> b) -> a -> c . String -> GenComponent forall os. String -> Component os Component newtype File = File GenComponent data Dir = Dir data FileDir = FileDir instance NFData Abs where rnf :: Abs -> () rnf (Abs GenComponent drive) = GenComponent -> () forall a. NFData a => a -> () rnf GenComponent drive instance NFData Rel where rnf :: Rel -> () rnf Rel Rel = () instance NFData AbsRel where rnf :: AbsRel -> () rnf (AbsO GenComponent drive) = GenComponent -> () forall a. NFData a => a -> () rnf GenComponent drive rnf AbsRel RelO = () instance NFData File where rnf :: File -> () rnf (File GenComponent pc) = GenComponent -> () forall a. NFData a => a -> () rnf GenComponent pc instance NFData Dir where rnf :: Dir -> () rnf Dir Dir = () instance NFData FileDir where rnf :: FileDir -> () rnf FileDir FileDir = () fileMap :: (String -> String) -> File -> File fileMap :: (String -> String) -> File -> File fileMap String -> String f (File GenComponent pc) = GenComponent -> File File (GenComponent -> File) -> GenComponent -> File forall a b. (a -> b) -> a -> b $ (String -> String) -> GenComponent -> GenComponent forall os. (String -> String) -> Component os -> Component os PC.map String -> String f GenComponent pc