@@ -105,43 +105,55 @@ parent path = case path of
105105(</>) :: Path s b (Dir d ) -> Path s (Rel d ) t -> Path s b t
106106---- System
107107lsp@ (RelDir _ _) </> (RelFile rp rprefix) =
108- let (RelDir lp' lprefix') = iterate parent lsp !! prefixNumParentDirs rprefix
109- in RelFile (lp' P. </> rp) lprefix'
108+ case iterate parent lsp !! prefixNumParentDirs rprefix of
109+ (RelDir lp' lprefix') -> RelFile (lp' P. </> rp) lprefix'
110+ _ -> impossible
110111lsp@ (RelDir _ _) </> (RelDir rp rprefix) =
111- let (RelDir lp' lprefix') = iterate parent lsp !! prefixNumParentDirs rprefix
112- in RelDir (lp' P. </> rp) lprefix'
112+ case iterate parent lsp !! prefixNumParentDirs rprefix of
113+ (RelDir lp' lprefix') -> RelDir (lp' P. </> rp) lprefix'
114+ _ -> impossible
113115lsp@ (AbsDir _) </> (RelFile rp rprefix) =
114- let (AbsDir lp') = iterate parent lsp !! prefixNumParentDirs rprefix
115- in AbsFile (lp' P. </> rp)
116+ case iterate parent lsp !! prefixNumParentDirs rprefix of
117+ (AbsDir lp') -> AbsFile (lp' P. </> rp)
118+ _ -> impossible
116119lsp@ (AbsDir _) </> (RelDir rp rprefix) =
117- let (AbsDir lp') = iterate parent lsp !! prefixNumParentDirs rprefix
118- in AbsDir (lp' P. </> rp)
120+ case iterate parent lsp !! prefixNumParentDirs rprefix of
121+ (AbsDir lp') -> AbsDir (lp' P. </> rp)
122+ _ -> impossible
119123---- Windows
120124lsp@ (RelDirW _ _) </> (RelFileW rp rprefix) =
121- let (RelDirW lp' lprefix') = iterate parent lsp !! prefixNumParentDirs rprefix
122- in RelFileW (lp' PW. </> rp) lprefix'
125+ case iterate parent lsp !! prefixNumParentDirs rprefix of
126+ (RelDirW lp' lprefix') -> RelFileW (lp' PW. </> rp) lprefix'
127+ _ -> impossible
123128lsp@ (RelDirW _ _) </> (RelDirW rp rprefix) =
124- let (RelDirW lp' lprefix') = iterate parent lsp !! prefixNumParentDirs rprefix
125- in RelDirW (lp' PW. </> rp) lprefix'
129+ case iterate parent lsp !! prefixNumParentDirs rprefix of
130+ (RelDirW lp' lprefix') -> RelDirW (lp' PW. </> rp) lprefix'
131+ _ -> impossible
126132lsp@ (AbsDirW _) </> (RelFileW rp rprefix) =
127- let (AbsDirW lp') = iterate parent lsp !! prefixNumParentDirs rprefix
128- in AbsFileW (lp' PW. </> rp)
133+ case iterate parent lsp !! prefixNumParentDirs rprefix of
134+ (AbsDirW lp') -> AbsFileW (lp' PW. </> rp)
135+ _ -> impossible
129136lsp@ (AbsDirW _) </> (RelDirW rp rprefix) =
130- let (AbsDirW lp') = iterate parent lsp !! prefixNumParentDirs rprefix
131- in AbsDirW (lp' PW. </> rp)
137+ case iterate parent lsp !! prefixNumParentDirs rprefix of
138+ (AbsDirW lp') -> AbsDirW (lp' PW. </> rp)
139+ _ -> impossible
132140---- Posix
133141lsp@ (RelDirP _ _) </> (RelFileP rp rprefix) =
134- let (RelDirP lp' lprefix') = iterate parent lsp !! prefixNumParentDirs rprefix
135- in RelFileP (lp' PP. </> rp) lprefix'
142+ case iterate parent lsp !! prefixNumParentDirs rprefix of
143+ (RelDirP lp' lprefix') -> RelFileP (lp' PP. </> rp) lprefix'
144+ _ -> impossible
136145lsp@ (RelDirP _ _) </> (RelDirP rp rprefix) =
137- let (RelDirP lp' lprefix') = iterate parent lsp !! prefixNumParentDirs rprefix
138- in RelDirP (lp' PP. </> rp) lprefix'
146+ case iterate parent lsp !! prefixNumParentDirs rprefix of
147+ (RelDirP lp' lprefix') -> RelDirP (lp' PP. </> rp) lprefix'
148+ _ -> impossible
139149lsp@ (AbsDirP _) </> (RelFileP rp rprefix) =
140- let (AbsDirP lp') = iterate parent lsp !! prefixNumParentDirs rprefix
141- in AbsFileP (lp' PP. </> rp)
150+ case iterate parent lsp !! prefixNumParentDirs rprefix of
151+ (AbsDirP lp') -> AbsFileP (lp' PP. </> rp)
152+ _ -> impossible
142153lsp@ (AbsDirP _) </> (RelDirP rp rprefix) =
143- let (AbsDirP lp') = iterate parent lsp !! prefixNumParentDirs rprefix
144- in AbsDirP (lp' PP. </> rp)
154+ case iterate parent lsp !! prefixNumParentDirs rprefix of
155+ (AbsDirP lp') -> AbsDirP (lp' PP. </> rp)
156+ _ -> impossible
145157_ </> _ = impossible
146158
147159-- | Returns the most right member of the path once split by separators.
@@ -233,15 +245,15 @@ castFile _ = impossible
233245-- Works well for \"normal\" relative paths like @\"a\\b\\c\"@ (Win) or @\"a\/b\/c\"@ (Posix).
234246-- If path is weird but still considered relative, like just @\"C:\"@ on Win,
235247-- results can be unexpected, most likely resulting with error thrown.
236- relDirToPosix :: MonadThrow m => Path s (Rel d1 ) (Dir d2 ) -> m (Path Posix (Rel d1 ) (Dir d2 ))
248+ relDirToPosix :: ( MonadThrow m ) => Path s (Rel d1 ) (Dir d2 ) -> m (Path Posix (Rel d1 ) (Dir d2 ))
237249relDirToPosix sp@ (RelDir _ _) = parseRelDirP $ FPP. joinPath $ FP. splitDirectories $ toFilePath sp
238250relDirToPosix sp@ (RelDirW _ _) = parseRelDirP $ FPP. joinPath $ FPW. splitDirectories $ toFilePath sp
239251relDirToPosix (RelDirP p pr) = return $ RelDirP p pr
240252relDirToPosix _ = impossible
241253
242254-- | Converts relative file path to posix, if it is not already posix.
243255-- Check 'relDirToPosix' for more details, they behave the same.
244- relFileToPosix :: MonadThrow m => Path s (Rel d1 ) (File f ) -> m (Path Posix (Rel d1 ) (File f ))
256+ relFileToPosix :: ( MonadThrow m ) => Path s (Rel d1 ) (File f ) -> m (Path Posix (Rel d1 ) (File f ))
245257relFileToPosix sp@ (RelFile _ _) = parseRelFileP $ FPP. joinPath $ FP. splitDirectories $ toFilePath sp
246258relFileToPosix sp@ (RelFileW _ _) = parseRelFileP $ FPP. joinPath $ FPW. splitDirectories $ toFilePath sp
247259relFileToPosix (RelFileP p pr) = return $ RelFileP p pr
0 commit comments