turtle
Shell programming, Haskell-style
| Version on this page: | 1.5.16 |
| LTS Haskell 24.16: | 1.6.2@rev:3 |
| Stackage Nightly 2025-07-14: | 1.6.2@rev:3 |
| Latest on Hackage: | 1.6.2@rev:3 |
turtle-1.5.16@sha256:366a9461bfbd14af6860b5fde90c5a1e1dbb9d6cbe4e956390f6590d7d37c138,4884Module documentation for 1.5.16
turtle is a reimplementation of the Unix command line environment
in Haskell so that you can use Haskell as both a shell and a scripting
language.
Features include:
Batteries included: Command an extended suite of predefined utilities
Interoperability: You can still run external shell commands
Portability: Works on Windows, OS X, and Linux
Exception safety: Safely acquire and release resources
Streaming: Transform or fold command output in constant space
Patterns: Use typed regular expressions that can parse structured values
Formatting: Type-safe
printf-style text formattingModern: Supports
textandsystem-filepath
Read Turtle.Tutorial for a detailed tutorial or Turtle.Prelude for a
quick-start guide
turtle is designed to be beginner-friendly, but as a result lacks certain
features, like tracing commands. If you feel comfortable using turtle
then you should also check out the Shelly library which provides similar
functionality.
Changes
1.5.16
- Add
cptreeL
1.5.15
- Add
toLines - Add
Turtle.Bytes.{fromUTF8,toUTF8} - Add
Turtle.Bytes.{compress,decompress} - Always expose a
MonadFailinstance, relying on thefailpackage where needed. Related GHC 8.8 preparedness.
1.5.14
- Fix
cptreeto copy symlinks instead of descending into them - Build against newer versions of
Win32package
1.5.13
- Fix
chmodbug - Add
reduceand re-export(<&>)
1.5.12
- Increase upper bound on
containers
1.5.11
- Don’t forward broken pipe exceptions when using
inproc - Increase upper bound on
stm - Tutorial improvements:
1.5.10
- Increase upper bound on
doctestandcriterion
1.5.9
- Add
symlink
1.5.8
- Bug fix:
invertno longer rejects inputs where a prefix matches the inverted pattern - Add lsdepth, findtree, cmin, and cmax
- Increase upper bound on
temporaryandfoldl
1.5.7
- Increase upper bound on
doctest
1.5.6
- Increase upper bound on
exceptions
1.5.5
- Increase upper bound on
criterion
1.5.4
- Increase upper bound on
exceptions
1.5.3
- Increase upper bound on
doctest
1.5.2
- Increase upper bound on
async
1.5.1
- GHC 8.4 support
- Re-export
encodeString/decodeString - Update tutorial to use
stack script - Increase upper bounds on dependencies
1.5.0
- BREAKING CHANGE: Add
MonadCatchinstance forShell- This requires a breaking change to the internal implementation of
Shell - Most breaking changes can be fixed by replacing the
Shellconstructor with the newly added_Shellutility for ease of migration - If you don’t use the
Shellconstructor then this change likely does not affect you
- This requires a breaking change to the internal implementation of
- Add
eprintf
1.4.5
- Add
grepText,uniq,nub,sorttoTurtle.Prelude - Increase upper bound on
unix-compat
1.4.4
- Fix small mistake in tutorial
1.4.3
- Increase upper bound on
doctest
1.4.2
- Add
sed{Prefix,Suffix,Entire}andinplace{Prefix,Suffix,Entire}
1.4.1
- Increase upper bound on
doctest
1.4.0
- BREAKING CHANGE: Remove unnecessary
Maybefrom type ofsingle - BREAKING CHANGE: Consolidate
searchableandexecutable stream{,WithErr}now throws anExitCodeon failure
1.3.6
- Build against
ghc-8.2 - Relax upper bound on
optparse-applicativeandfoldl
1.3.5
- Increase upper bound on
foldl
1.3.4
- Bug fix:
cptreenow correctly copies files instead of creating directories of the same name - Increase upper bound on
criterion
1.3.3
- Bug fix: Change
textToLinesto behave likeData.Text.splitOn "\n"instead ofData.Text.unlines- This fixes weird behavior around handling empty strings.
splitOndoes the right thing, butunlinesdoes not. For example, this indirectly fixes a regression insed, which would discard empty lines
- This fixes weird behavior around handling empty strings.
- Bug fix:
which/whichAllnow behave correctly on Windows - Add new
cptree/singleutilities - Documentation fixes
1.3.2
- Fix bugs in subprocess management
- Generalize type of
reprto return any type that implementsIsString - Add
optLine,argLine, andlutilities to simplify working withLines
1.3.1
findno longer follows symlinks- Increase upper bound on
directory
1.3
- BREAKING CHANGE: Several utilities now produce and consume
Lines instead ofText- The purpose of this change is to fix a very common source of confusion for new users about which utilities are line-aware
- Most of the impact on existing code is just changing the types by
replacing
TextwithLinein the right places. The change at the term level should be small (based on the changes to the tutorial examples)
- BREAKING CHANGE:
Descriptionnow wraps aDocinstead ofText- In the most common case where users use string literals this has no effect
- New
Turtle.Bytesmodule that providesByteStringvariations on subprocess runners - Fix
dureporting incorrect sizes for directories - Add
pushd,stat,lstat,which,procStrictWithErr,shellStrictWithErr,onFiles,header,subcommandGroup, andparallel - Backport
needto GHC 7.6.3 - Fix missing help text for option parsers
- Fix bugs in subprocess management
1.2.8
- Increase upper bound on
timeandtransformers - Fix incorrect lower bound for
base
1.2.7
- Increase upper bound on
clockdependency
1.2.6
- Generalize several types to use
MonadManaged - Generalize type of
printfto useMonadIO - Add
system, andcopymod - Fix
rmtreeto more accurately match behavior ofrm -r
1.2.5
- Add
printf,utc,procs, andshells
1.2.4
- Generalize type of
dformat specifier to format anyIntegraltype - Add
inprocWithErr,inShellWithErr,inplace, andsz
1.2.3
- Add
subcommandandtestpath - Use line buffering for
Text-based subprocesses
1.2.2
- Re-export
with - Add
begins,ends,contains,lowerBounded,mktempfile,nl,pasteendless,lsif, andcut - Fix subprocess management bugs
1.2.1
- Fix subprocess management bugs
1.2.0
- BREAKING CHANGE:
dunow returns aSizeinstead of anInteger - New
Turtle.Optionsmodule that provides convenient utilities for options parsing - Add
hostname,outhandle,stderr,cache,countChars,countWords, andcountLines - Fix subprocess management bugs
1.1.1
- Add
bounded,upperBounded,procStrict,shellStrict,arguments - Add several
Permissions-related commands - Generalize several types to
MonadIO
1.1.0
- BREAKING CHANGE: Remove
Floating/Fractionalinstances forPatternandShell - BREAKING CHANGE: Change behavior of
Numinstance forPatternandShell - Re-export
(&) - Add
asciiCI,(.||.),(.&&.),strict
1.0.2
- Add
fpformat specifier - Add
chars/charshigh-efficiency parsing primitives - Fix bugs in path handling
1.0.1
- Generalize type of
die - Fix doctest
1.0.0
- Initial release