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