melf-1.3.1: src/Data/Elf/Constants.hs
-- |
-- Module : Data.ELF.Constants
-- Description : Definitions of constants used in ELF files
-- Copyright : (c) Aleksey Makarov, 2021
-- License : BSD 3-Clause License
-- Maintainer : aleksey.makarov@gmail.com
-- Stability : experimental
-- Portability : portable
--
-- Definitions of constants used in ELF files
-- https://stackoverflow.com/questions/10672981/export-template-haskell-generated-definitions
module Data.Elf.Constants (
-- $docs
module Data.Elf.Constants.Data
) where
import Data.Elf.Constants.Data
{- $docs
Constants defined here are declared using Template Haskell,
so the full documentation is supported only starting from @template-haskell@ version 2.18.
For the older versions see the sources or the documents describing ELF file format.
Data types, patterns and instances are generated by @mkDeclarations@ TH macros.
Below is an example of how it works. The code
@
$(mkDeclarations BaseWord16 \"TypeName\" \"ValuePrefix\"
[ (\"_A\", 0, "Doc strig for ValuePrefix_A")
, (\"_B\", 1, "Doc strig for ValuePrefix_B")
])
@
produces this:
@
newtype TypeName = TypeName Word16 deriving (Eq, Ord, Enum, Num, Real, Integral, Bits, FiniteBits)
instance Show TypeName where
show (TypeName 0) = (\"ValuePrefix\" ++ "_A")
show (TypeName 1) = (\"ValuePrefix\" ++ "_B")
show (TypeName n_a5QI) = (\"TypeName\" ++ (\" \" ++ show n_a5QI))
pattern ValuePrefix_A :: TypeName
pattern ValuePrefix_A = TypeName 0
pattern ValuePrefix_B :: TypeName
pattern ValuePrefix_B = TypeName 1
instance Binary (Le TypeName) where
get = (Le \<$\> (TypeName \<$\> getWord16le))
put (Le (TypeName n_a5QK)) = putWord16le n_a5QK
instance Binary (Be TypeName) where
get = (Be \<$\> (TypeName \<$\> getWord16be))
put (Be (TypeName n_a5QL)) = putWord16be n_a5QL
@
-}