hgrib alternatives and similar packages
Based on the "Data" category.
Alternatively, view hgrib alternatives based on common mentions on social networks and blogs.
-
lens
Lenses, Folds, and Traversals - Join us on web.libera.chat #haskell-lens -
semantic-source
Parsing, analyzing, and comparing source code across many languages -
code-builder
Packages for defining APIs, running them, generating client code and documentation. -
text
Haskell library for space- and time-efficient operations over Unicode text. -
compendium-client
Mu (μ) is a purely functional framework for building micro services. -
cassava
A CSV parsing and encoding library optimized for ease of use and high performance -
holmes
A reference library for constraint-solving with propagators and CDCL. -
primitive
This package provides various primitive memory-related operations. -
resource-pool
A high-performance striped resource pooling implementation for Haskell -
discrimination
Fast linear time sorting and discrimination for a large class of data types -
reflection
Reifies arbitrary Haskell terms into types that can be reflected back into terms -
dependent-sum
Dependent sums and supporting typeclasses for comparing and displaying them -
IORefCAS
A collection of different packages for CAS based data structures. -
dependent-map
Dependently-typed finite maps (partial dependent products) -
text-icu
This package provides the Haskell Data.Text.ICU library, for performing complex manipulation of Unicode text. -
orgmode-parse
Attoparsec parser combinators for parsing org-mode structured text! -
streaming
An optimized general monad transformer for streaming applications, with a simple prelude of functions -
scientific
Arbitrary-precision floating-point numbers represented using scientific notation
Access the most powerful time series database as a service
Do you think we are missing an alternative of hgrib or a related project?
README
HGrib
Unofficial bindings for ECMWF's GRIB API library for reading and writing WMO FM-92 GRIB edition 1 and edition 2 messages.
In this version of HGrib, a read-only monadic Haskell interface to GRIB API is provided. Raw bindings for the documented parts of GRIB API are also available. Future versions are intended to expand the higher-level Haskell interface to include, among other things, write support.
Installation
The following prerequisites are needed to build HGrib:
GRIB API >= 1.12 installed and discoverable by ghc (use cabal's
--extra-include-dirs
and--extra-lib-dirs
if it's installed at a custom location); andHaskell base >= 4.5; and
c2hs == 0.26.*.
With these requirements available, HGrib can be installed from Hackage with Cabal:
cabal install hgrib
Usage
HGrib provides a high-level monadic Haskell interface to GRIB API in
Data.Grib
. An example of its usage is GRIB API's get.c
example re-written with HGrib:
import Control.Exception ( assert )
import Data.Grib
import Text.Printf ( printf )
main :: IO ()
main = let filename = "test/stage/regular_latlon_surface.grib1" in
runGribIO_ filename $ do
setString "file" filename
getLong "Ni" >>= liftIO . printf "numberOfPointsAlongAParallel=%d\n"
getLong "Nj" >>= liftIO . printf "numberOfPointsAlongAMeridian=%d\n"
getDouble "yFirst" >>=
liftIO . printf "latitudeOfFirstGridPointInDegrees=%g\n"
getDouble "xFirst" >>=
liftIO . printf "longitudeOfFirstGridPointInDegrees=%g\n"
getDouble "yLast" >>=
liftIO . printf "latitudeOfLastGridPointInDegrees=%g\n"
getDouble "xLast" >>=
liftIO . printf "longitudeOfLastGridPointInDegrees=%g\n"
getDouble "DyInDegrees" >>=
liftIO . printf "jDirectionIncrementInDegrees=%g\n"
getDouble "DxInDegrees" >>=
liftIO . printf "iDirectionIncrementInDegrees=%g\n"
getString "packingType" >>= liftIO . printf "packingType=%s\n"
values <- getValues
let numValues = length values
average = sum values / fromIntegral numValues
liftIO $ printf "There are %d values, average is %g\n" numValues average
filename' <- getString "file"
liftIO $ assert (filename' == filename) (return ())
Raw bindings for the documented part of GRIB API is also
available in Data.Grib.Raw
. To be able to work with these bindings,
bindings for C's fopen
is provided in Data.Grib.Raw.CFile
(which
is re-exported by Data.Grib.Raw
).
For more information, see HGrib's reference documentation generated by Haddock.
Contributing
Issues, feature and pull requests are most welcome! In particular, please give suggestions on what you would like to see in the higher-level interface and let me know if there is any undocumented part of GRIB API that you would like to have included.
Licenses
HGrib was created and is currently maintained by Mattias Jakobsson. It is released under the GNU General Public License v3.0. ECMWF's GRIB API is released under the Apache license. HGrib is in no way associated with ECMWF or the original library.
*Note that all licence references and agreements mentioned in the hgrib README section above
are relevant to that project's source code only.