foscam-directory 0.0.5 → 0.0.6
raw patch · 3 files changed
+52/−13 lines, 3 files
Files
- changelog +3/−0
- foscam-directory.cabal +1/−1
- src/Data/Foscam/Directory.hs +48/−12
changelog view
@@ -18,3 +18,6 @@ * Fix `getFoscamDirectoryContents` to include directory. +0.0.6++* Add optics for `FoscamDirectoryFile`.
foscam-directory.cabal view
@@ -1,5 +1,5 @@ name: foscam-directory-version: 0.0.5+version: 0.0.6 license: BSD3 license-file: LICENSE author: Tony Morris <ʇǝu˙sıɹɹoɯʇ@ןןǝʞsɐɥ> <dibblego>
src/Data/Foscam/Directory.hs view
@@ -3,15 +3,20 @@ module Data.Foscam.Directory( getFoscamDirectoryContents , FoscamDirectoryFile(Isn't, Is)-, filenames+, _FoscamDirectory+, _Isn't+, _Is+, _Isn'tFilename+, _IsFilename ) where -import Control.Category(id)+import Control.Category((.))+import Control.Lens(Lens', Prism', Traversal', lens, prism', _1, _2) import Data.ByteString.UTF8 as UTF8(fromString) import Data.Eq(Eq) import Data.Foscam.File.Filename(Filename, filename) import Data.Functor(fmap, (<$>))-import Data.List(foldr)+import Data.Maybe(Maybe(Just, Nothing)) import Data.Ord(Ord) import System.Directory(getDirectoryContents) import System.IO(IO, FilePath)@@ -20,7 +25,7 @@ import Prelude(Show) data FoscamDirectoryFile =- Isn't FilePath+ Isn't FilePath FilePath | Is FilePath Filename deriving (Eq, Ord, Show) @@ -31,12 +36,43 @@ (fmap (\f -> case parseString filename (Directed (UTF8.fromString p) 0 0 0 0) f of Success n -> Is p n- Failure _ -> Isn't f)) <$> getDirectoryContents p+ Failure _ -> Isn't p f)) <$> getDirectoryContents p -filenames ::- [FoscamDirectoryFile]- -> [(FilePath, Filename)]-filenames =- foldr (\f -> case f of- Isn't _ -> id- Is p n -> ((p,n):)) []+_FoscamDirectory ::+ Lens' FoscamDirectoryFile FilePath+_FoscamDirectory =+ lens+ (\d -> case d of + Isn't p _ -> p+ Is p _ -> p)+ (\d p -> case d of + Isn't _ x -> Isn't p x+ Is _ x -> Is p x)++_Isn't ::+ Prism' FoscamDirectoryFile (FilePath, FilePath)+_Isn't =+ prism'+ (\(d, p) -> Isn't d p)+ (\d -> case d of+ Isn't p x -> Just (p, x)+ Is _ _ -> Nothing)++_Is ::+ Prism' FoscamDirectoryFile (FilePath, Filename)+_Is =+ prism'+ (\(d, p) -> Is d p)+ (\d -> case d of+ Isn't _ _ -> Nothing+ Is p x -> Just (p, x))++_IsFilename ::+ Traversal' FoscamDirectoryFile Filename+_IsFilename =+ _Is . _2++_Isn'tFilename ::+ Traversal' FoscamDirectoryFile FilePath+_Isn'tFilename =+ _Is . _1