No description
- Haskell 100%
| app | ||
| src/Git | ||
| test | ||
| .gitignore | ||
| ChangeLog.md | ||
| LICENSE | ||
| package.yaml | ||
| README.md | ||
| Setup.hs | ||
| stack.yaml | ||
| stack.yaml.lock | ||
git-haskell
About
This project is an implementation of a subset of git commands in Haskell for learning purposes.
Planned implementation
- Git index (
git add) - Low level git commands
git cat-filegit hash-objectgit commit-treegit ls-tree
git checkoutgit loggit status
(Planned) Differences from vanilla git
- Errors/error messages may be handled differently/different
- (Currently just throwing exceptions for parse errors/not git directory errors)
- Not planning to handle every argument for implemented commands just major ones
- No packfiles
Progress
- Parse and represent
blobfiles - Parse and represent
treefiles cmd_catfileandcmd_hashfilefunctions working in library
Learning Documentation
Concepts/Things I've used in this project
- Parser combinators (megaparsec)
- Monad transformers (MaybeT)
- Bang patterns (laziness)
- Character encodings - Binary encoding vs Base16 vs UTF-8 etc.
Building
Build with stack:
stack build
Testing
TODO