Splice ./universe directory into ./
Manually merging: - README.md: I added the description from universe/README.md into the heading of dotfiles/README.md. - .envrc: dotfiles/.envrc was a superset of universe/.envrc - .gitignore: Adding some of the ignored patterns from universe/.gitignore to dotfiles/.gitignore Everything else here should be a simple rename.
This commit is contained in:
parent
fb9380ba26
commit
5c9079a410
133 changed files with 17 additions and 7979 deletions
64
haskell-file/f.hs
Normal file
64
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 ()
|
||||
Loading…
Add table
Add a link
Reference in a new issue