Сопоставление с образцом / деконструкция двоичных файлов и цепочек битов в Haskell, аналогичная Elixir / Erlang - PullRequest
1 голос
/ 26 февраля 2020

В Elixir / Erlang можно выполнить такой тип сопоставления / деконструкции по двоичным файлам и цепочкам битов:

  def func1(my_data) do
      <<
        1,
        44,
        a::little-32,
        b::little-64, 
        c, 
        d::64-little, 
        e::32-little-float, 
        rest::binary
      >> = my_data

      # using a, b, c, d, e, rest 

   end

Я не нашел способа сделать это в Haskell. Есть ли из коробки емкость Haskell? Или потребуется использование сторонней библиотеки?

1 Ответ

4 голосов
/ 26 февраля 2020

Этого не существует, но нечто подобное можно реализовать в виде библиотеки с синонимами шаблонов, поэтому это будет выглядеть так:

-- For some definition of (:.)
case myData of
  (1 :: Word8) :.
    (44 :: Word8) :.
    (a :: Little32) :.
    (b :: Little64) :.
    (c :: Word8) :.
    (d :: Little64) :.
    (e :: LittleFloat32) :.
    rest ->
    {- using a, b, c, d, e, rest -}

Полный текст https://gist.github.com/Lysxia/8ee6b9debd613b988023d5a0a8dfd9cc

В Haskell мы обычно предпочитаем библиотеки комбинатора синтаксического анализа, такие как двоичный пакет .

...