Moshi is the pattern in Chinese (模式). This package is the refactor of MLStyle with
- more correct pattern language for pattern match with
@match
- type-stable algebra data type/tagged union with generics via
@data
- traits, derive macro
@derive
from rust
Important
This project is in the early stage of development. The macro syntax has been iterated acorss several packages including Expronicon, MLStyle. The syntax are mostly stable. However, the API and features are subject to change.
Moshi is a Julia Language package. To install Moshi, please open Julia's interactive session (known as REPL) and press ] key in the REPL to use the package mode, then type the following command
pkg> add Moshi
Here is a quick example of defining a simple algebraic data type:
using Moshi.Data: @data
@data Message begin
Quit
struct Move
x::Int
y::Int
end
Write(String)
ChangeColor(Int, Int, Int)
end
For pattern matching, if you already used MLStyle
, the syntax is very similar:
using Moshi.Match: @match
@match [1.0, 2, 3] begin
[1, xs::Float64...] => xs
end
@match (1, 2.0, "a") begin
(1, x::Int, y::String) => x
(1, x::Real, y::String) => y
end
MIT License