-- Hoogle documentation, generated by Haddock
-- See Hoogle, http://www.haskell.org/hoogle/
-- | Gray encoding schemes
--
-- Gray codes satisfy the property that two successive values differ in
-- only one digit. Usually the term "Gray code" refers to the Binary
-- Reflected Gray code (BRGC), but non-binary Gray codes have also been
-- discovered.
@package gray-extended
@version 1.5
-- | Gray encoding schemes. A Gray code is a list of values such that two
-- successive values differ in only one digit. Usually the term /Gray
-- code/ refers to the Binary Reflected Gray code (BRGC), but non-binary
-- Gray codes have also been discovered. Some Gray codes are also
-- cyclic: the last and first values differ in only one digit.
module Codec.Gray
-- | grayCodes k generates the list of Binary Reflected
-- Gray Code (BRGC) numbers of length k. This code is cyclic.
grayCodes :: Int -> [[Bool]]
-- | integralToGray n encodes n using a BRGC, and
-- returns the resulting bits as an integer. For example, encoding
-- 17 in BRGC results in 11001, or 25. So
-- integralToGray 17 returns 25.
integralToGray :: Bits a => a -> a
-- | grayToIntegral n decodes n using a BRGC, and
-- returns the resulting integer. For example, 25 is 11001,
-- which is the code for 17. So grayToIntegral 25 returns
-- 17.
grayToIntegral :: (Num a, Bits a) => a -> a
-- | naryGrayCodes xs k generates a non-Boolean (or n-ary)
-- Gray code of length k using the elements of xs as
-- "digits". This code is cyclic.
--
-- Ex: naryGrayCodes "012" 4 generates a ternary Gray
-- code that is four digits long.
naryGrayCodes :: [a] -> Int -> [[a]]