Packages
metastatic
0.7.4
0.26.0
0.25.0
0.24.1
0.24.0
0.23.0
0.22.2
0.22.1
0.22.0
0.21.3
0.21.2
0.21.1
0.21.0
0.20.3
0.20.2
0.20.1
0.20.0
0.19.0
0.18.0
0.17.0
0.16.0
0.15.1
0.15.0
0.14.2
0.14.1
0.14.0
0.13.3
0.13.2
0.13.1
0.13.0
0.12.0
0.11.0
0.10.4
0.10.3
0.10.2
0.10.1
0.10.0
0.9.2
0.9.1
0.9.0
0.8.6
0.8.5
0.8.4
0.8.3
0.8.2
0.8.1
0.8.0
0.7.7
0.7.6
0.7.5
0.7.4
0.7.3
0.7.1
0.7.0
0.6.1
0.6.0
0.5.2
0.5.1
0.5.0
0.4.2
0.4.1
0.4.0
0.3.5
0.3.4
0.3.3
0.3.2
0.3.1
0.3.0
0.2.0
0.1.3
0.1.2
0.1.1
0.1.0
Cross-language code meta-model library using unified MetaAST representation. Parse, transform, and translate code across Python, Elixir, Ruby, Erlang, Haskell, and more via a shared three-tuple AST format.
Current section
Files
Jump to
Current section
Files
lib/metastatic/adapters/haskell.ex
defmodule Metastatic.Adapters.Haskell do
@moduledoc """
Haskell language adapter for Metastatic.
This adapter provides bidirectional transformation between Haskell source code
and MetaAST (M2) representation.
## Architecture
- `parse/1` - Haskell source → Haskell AST (via haskell-src-exts)
- `to_meta/1` - Haskell AST → MetaAST (M2 abstraction)
- `from_meta/2` - MetaAST → Haskell AST (M2 reification)
- `unparse/1` - Haskell AST → Haskell source (via haskell-src-exts)
## Example
iex> {:ok, ast} = Metastatic.Adapters.Haskell.parse("1 + 2")
iex> {:ok, meta_ast, _metadata} = Metastatic.Adapters.Haskell.ToMeta.transform(ast)
iex> meta_ast
{:binary_op, :arithmetic, :+, {:literal, :integer, 1}, {:literal, :integer, 2}}
"""
@behaviour Metastatic.Adapter
alias Metastatic.Adapters.Haskell.{FromMeta, Subprocess, ToMeta}
@impl true
def parse(source) when is_binary(source) do
Subprocess.parse(source)
end
@impl true
def to_meta(haskell_ast) do
ToMeta.transform(haskell_ast)
end
@impl true
def from_meta(meta_ast, metadata \\ %{}) do
FromMeta.transform(meta_ast, metadata)
end
@impl true
def unparse(_haskell_ast) do
{:error, "Unparsing not yet implemented for Haskell"}
end
@impl true
def file_extensions do
[".hs", ".lhs"]
end
end