Haskell 中的二进制文件和位串的模式匹配/解构类似于 Elixir/Erlang 中的一个

Pattern matching / deconstruction of binaries and bitstrings in Haskell that's similiar to the one of Elixir/Erlang

在 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有开箱即用的容量吗?还是需要使用一些第三方库?

没有开箱即用的东西,但是可以将类似的东西实现为具有模式同义词的库,所以它看起来像这样:

-- 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 中,我们通常更喜欢像 binary package.

这样的解析器组合器库