Add 'universe/' from commit '8ad51b24dd'
				
					
				
			git-subtree-dir: universe git-subtree-mainline:15110e6de9git-subtree-split:8ad51b24dd
This commit is contained in:
		
						commit
						fb9380ba26
					
				
					 131 changed files with 13792 additions and 0 deletions
				
			
		
							
								
								
									
										67
									
								
								universe/haskell-file/f-todo.org
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										67
									
								
								universe/haskell-file/f-todo.org
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,67 @@ | |||
| * Paths | ||||
| ** TODO f-join (&rest args) | ||||
| ** TODO f-split (path) | ||||
| ** TODO f-expand (path &optional dir) | ||||
| ** TODO f-filename (path) | ||||
| ** TODO f-dirname (path) | ||||
| ** TODO f-common-parent (paths) | ||||
| ** TODO f-ext (path) | ||||
| ** TODO f-no-ext (path) | ||||
| ** TODO f-swap-ext (path ext) | ||||
| ** TODO f-base (path) | ||||
| ** TODO f-relative (path &optional dir) | ||||
| ** TODO f-short (path) | ||||
| ** TODO f-long (path) | ||||
| ** TODO f-canonical (path) | ||||
| ** TODO f-slash (path) | ||||
| ** TODO f-full (path) | ||||
| ** TODO f-uniquify (paths) | ||||
| ** TODO f-uniquify-alist (paths) | ||||
| * I/O | ||||
| ** TODO f-read-bytes (path) | ||||
| ** TODO f-write-bytes (data path) | ||||
| ** TODO f-read-text (path &optional coding) | ||||
| ** TODO f-write-text(text coding path) | ||||
| ** TODO f-append-text(text coding path) | ||||
| ** TODO f-append-bytes(text coding path) | ||||
| ** TODO Destructive | ||||
| ** TODO f-mkdir (&rest dirs) | ||||
| ** TODO f-delete (path &optional force) | ||||
| ** TODO f-symlink (source path) | ||||
| ** TODO f-move (from to) | ||||
| ** TODO f-copy (from to) | ||||
| ** TODO f-copy-contenst (from to) | ||||
| ** TODO f-touch (path) | ||||
| ** TODO Predicates | ||||
| ** TODO f-exists? (path) | ||||
| ** TODO f-directory? (path) | ||||
| ** TODO f-file? (path) | ||||
| ** TODO f-symlink? (path) | ||||
| ** TODO f-readable? (path) | ||||
| ** TODO f-writable? (path) | ||||
| ** TODO f-executable? (path) | ||||
| ** TODO f-absolute? (path) | ||||
| ** TODO f-relative? (path) | ||||
| ** TODO f-root? (path) | ||||
| ** TODO f-ext? (path ext) | ||||
| ** TODO f-same? (path-a path-b) | ||||
| ** TODO f-parent-of? (path-a path-b) | ||||
| ** TODO f-child-of? (path-a path-b) | ||||
| ** TODO f-ancestor-of? (path-a path-b) | ||||
| ** TODO f-descendant-of? (path-a path-b) | ||||
| ** TODO f-hidden? (path) | ||||
| ** TODO f-empty? (path) | ||||
| ** TODO Stats | ||||
| ** TODO f-size (path) | ||||
| ** f-depth (path) | ||||
| 
 | ||||
| * Misc | ||||
| ** TODO f-this-file () | ||||
| ** TODO f-path-separator () | ||||
| ** TODO f-glob (pattern &optional path) | ||||
| ** TODO f-entries (path &optional fn recursive) | ||||
| ** TODO f-directories (path &optional fn recursive) | ||||
| ** TODO f-files (path &optional fn recursive) | ||||
| ** TODO f-root () | ||||
| ** TODO f-traverse-upwards (fn &optional path) | ||||
| ** TODO f-with-sandbox (path-or-paths &rest body) | ||||
							
								
								
									
										64
									
								
								universe/haskell-file/f.hs
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										64
									
								
								universe/haskell-file/f.hs
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,64 @@ | |||
| module F | ||||
|   ( join | ||||
|   , split | ||||
|   ) where | ||||
| 
 | ||||
| -------------------------------------------------------------------------------- | ||||
| -- Dependencies | ||||
| -------------------------------------------------------------------------------- | ||||
| 
 | ||||
| import Data.List (span) | ||||
| import System.FilePath (FilePath, pathSeparator) | ||||
| import System.FilePath.Posix (FilePath) | ||||
| import qualified System.FilePath.Posix as F | ||||
| 
 | ||||
| -- TODO: Move this to a misc.hs, prelude.hs, operators.hs; somewhere. | ||||
| (|>) :: a -> (a -> b) -> b | ||||
| (|>) a f = f a | ||||
| infixl 1 |> | ||||
| 
 | ||||
| -- TODO: Move this to a test_utils.hs or elsewhere. | ||||
| simpleAssert :: (Eq a) => a -> a -> () | ||||
| simpleAssert x y = | ||||
|   if x == y then | ||||
|     () | ||||
|   else | ||||
|     error "Assertion error" | ||||
| 
 | ||||
| -------------------------------------------------------------------------------- | ||||
| -- Library | ||||
| -------------------------------------------------------------------------------- | ||||
| 
 | ||||
| join :: [FilePath] -> FilePath | ||||
| join = F.joinPath | ||||
| 
 | ||||
| -- | Split path and return  list containing parts. | ||||
| split :: FilePath -> [String] | ||||
| split = splitJoin . span (/= pathSeparator) | ||||
|   where | ||||
|     splitJoin :: (String, String) -> [String] | ||||
|     splitJoin ([], []) = [] | ||||
|     splitJoin (a, []) = [a] | ||||
|     splitJoin (a, [_]) = [a] | ||||
|     splitJoin (a, _:b) = a : split b | ||||
| 
 | ||||
| -------------------------------------------------------------------------------- | ||||
| -- Tests | ||||
| -------------------------------------------------------------------------------- | ||||
| 
 | ||||
| expected :: [([FilePath], FilePath)] | ||||
| expected = [ (["path"], "path") | ||||
|            , (["/path"], "/path") | ||||
|            , (["path", "to", "file"], "path/to/file") | ||||
|            , (["/path", "to", "file"], "/path/to/file") | ||||
|            , (["/"], "/") | ||||
|            ] | ||||
| 
 | ||||
| runTests :: [()] | ||||
| runTests = | ||||
|   fmap (\(input, expected) -> simpleAssert (join input) expected) expected | ||||
| 
 | ||||
| main :: IO () | ||||
| main = do | ||||
|   print runTests | ||||
|   pure () | ||||
							
								
								
									
										9
									
								
								universe/haskell-file/shell.nix
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										9
									
								
								universe/haskell-file/shell.nix
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,9 @@ | |||
| with import <nixpkgs> {}; | ||||
| 
 | ||||
| stdenv.mkDerivation { | ||||
|   name = "f-hs"; | ||||
|   buildInputs = [ | ||||
|     (pkgs.haskellPackages.ghcWithPackages (pkgs: [ | ||||
|     ])) | ||||
|   ]; | ||||
| } | ||||
							
								
								
									
										39
									
								
								universe/haskell-file/tests.hs
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										39
									
								
								universe/haskell-file/tests.hs
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,39 @@ | |||
| module FTest where | ||||
| -------------------------------------------------------------------------------- | ||||
| import Test.Tasty | ||||
| import Test.Tasty.Hedgehog | ||||
| import Hedgehog | ||||
| -------------------------------------------------------------------------------- | ||||
| import qualified Hedgehog as H | ||||
| import qualified Hedgehog.Gen as Gen | ||||
| import qualified Hedgehog.Range as Range | ||||
| -------------------------------------------------------------------------------- | ||||
| import Data.List (intercalate) | ||||
| import System.FilePath (pathSeparator) | ||||
| -------------------------------------------------------------------------------- | ||||
| import F | ||||
| -------------------------------------------------------------------------------- | ||||
| main :: IO () | ||||
| main | ||||
|   = defaultMain | ||||
|   . localOption (HedgehogTestLimit $ Just 50) | ||||
|   $ testGroup "f functions" | ||||
|   [ test_split | ||||
|   ] | ||||
| -------------------------------------------------------------------------------- | ||||
| test_split :: TestTree | ||||
| test_split | ||||
|   = testGroup "split function" | ||||
|   [ testProperty "splits parts properly" splitSuccess | ||||
|   ] | ||||
| splitSuccess :: Property | ||||
| splitSuccess = property $ do | ||||
|   -- separator | ||||
|   --   <- H.forAll | ||||
|   --   $ Gen.element ['/', '\\'] | ||||
|   parts | ||||
|     <- H.forAll | ||||
|     . Gen.list (Range.linear 0 10) | ||||
|     $ Gen.list (Range.linear 1 10) Gen.alphaNum | ||||
|   let path = intercalate [pathSeparator] parts | ||||
|   F.split path === parts | ||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue