prefix-units package
This package defines a datatype (Unit
) and associated
parsing/formatting functions so that command line applications can
handle “nice” values like:
$ cmd create-file foo 100G
Done.
$ cmd ls-file foo
Size is 100Gi
$ cmd ls-files
foo 100Gi
bar 14Ki
And so on. For details on the API, look at the Haddock documentation
for the Data.Prefix.Units
module.
For building and installing, cabal configure
and related commands
are enough. Run cabal configure --enable-tests && cabal build && cabal test
if you want to run the unit-tests.
The library is designed to have very few dependencies (only base and a
few GHC extensions), so that it’s trivial to use it in projects. Hence
the use of some hand-coded conversions instead of using
TemplateHaskell to generate them automatically.
TODO
The current interface of the library works, but is not nicely
composable. I’m still looking for a nicer way to expose the parsing
functionality.
Currently, the binary and SI units are mixed in the same
data-type. This works, but at some level I think two separate types
would be more “correct”, at the expense of a more complex API.
The RationalConvertible type class has only a few instances; ideally
we’d have instance Integral a => RationalConvertible a
and similar
for Fractional
, but this doesn’t work as such in Haskell, so we’re
stuck with the manual derivation.
The current behaviour is case-sensitive for all units in ParseExact
mode, which means that one has to use (in this mode) Ki
for the
binary unit Kibi
. This seems suboptimal, since the binary units are
unique irrespective of casing.