gleamgen/pattern
Types
Values
pub fn as_(
original: Pattern(input, a),
name: String,
) -> Pattern(input, expression.Expression(input))
pub fn bool_literal(literal: Bool) -> Pattern(Bool, Nil)
pub fn can_match_on_multiple(pattern: Pattern(a, b)) -> Bool
pub fn concat_string(
starting initial: String,
variable variable: String,
) -> Pattern(String, expression.Expression(a))
Match a string that starts with initial
case_.new(expression.string("I love gleam"))
|> case_.with_pattern(
pattern.concat_string(starting: "I love ", variable: "thing"),
fn(thing) {
expression.string("I love ")
|> expression.concat_string(thing)
|> expression.concat_string(expression.string(" too"))
},
)
|> case_.with_pattern(pattern.variable("_"), fn(_) {
expression.string("interesting")
})
|> case_.build_expression()
|> expression.render(render.default_context())
|> render.to_string()
// -> "case \"I love gleam\" {
\"I love \" <> thing -> \"I love \" <> thing <> \" too\"
_ -> \"Interesting\"
}"
pub fn foreign_variant(
variant_name: String,
field_patterns: List(Pattern(types.Dynamic, types.Dynamic)),
) -> Pattern(
types.Dynamic,
List(expression.Expression(types.Dynamic)),
)
Match VariantName(p1, p2, …) when the variant comes from another module.
Pass pattern.variable(\"field\") |> pattern.to_dynamic for each field in order.
The case handler receives each field’s pattern output, typically
expression.raw(\"field\"), as a list in left-to-right order.
pub fn from_constructor0(
constructor: constructor.Constructor(
construct_to,
#(),
generics,
),
) -> Pattern(construct_to, Nil)
pub fn from_constructor1(
constructor: constructor.Constructor(
construct_to,
#(#(), a),
generics,
),
first: Pattern(a, a_output),
) -> Pattern(custom.CustomType(construct_to, generics), a_output)
pub fn from_constructor2(
constructor: constructor.Constructor(
construct_to,
#(#(#(), a), b),
generics,
),
first: Pattern(a, a_output),
second: Pattern(b, b_output),
) -> Pattern(
custom.CustomType(construct_to, generics),
#(a_output, b_output),
)
pub fn from_constructor3(
constructor: constructor.Constructor(
construct_to,
#(#(#(#(), a), b), c),
generics,
),
first: Pattern(a, a_output),
second: Pattern(b, b_output),
third: Pattern(c, c_output),
) -> Pattern(construct_to, #(a_output, b_output, c_output))
pub fn from_constructor4(
constructor: constructor.Constructor(
construct_to,
#(#(#(#(#(), a), b), c), d),
generics,
),
first: Pattern(a, a_output),
second: Pattern(b, b_output),
third: Pattern(c, c_output),
fourth: Pattern(d, d_output),
) -> Pattern(
construct_to,
#(a_output, b_output, c_output, d_output),
)
pub fn from_constructor5(
constructor: constructor.Constructor(
construct_to,
#(#(#(#(#(#(), a), b), c), d), e),
generics,
),
first: Pattern(a, a_output),
second: Pattern(b, b_output),
third: Pattern(c, c_output),
fourth: Pattern(d, d_output),
fifth: Pattern(e, e_output),
) -> Pattern(
construct_to,
#(a_output, b_output, c_output, d_output, e_output),
)
pub fn from_constructor6(
constructor: constructor.Constructor(
construct_to,
#(#(#(#(#(#(#(), a), b), c), d), e), f),
generics,
),
first: Pattern(a, a_output),
second: Pattern(b, b_output),
third: Pattern(c, c_output),
fourth: Pattern(d, d_output),
fifth: Pattern(e, e_output),
sixth: Pattern(f, f_output),
) -> Pattern(
construct_to,
#(a_output, b_output, c_output, d_output, e_output, f_output),
)
pub fn from_constructor7(
constructor: constructor.Constructor(
construct_to,
#(#(#(#(#(#(#(#(), a), b), c), d), e), f), g),
generics,
),
first: Pattern(a, a_output),
second: Pattern(b, b_output),
third: Pattern(c, c_output),
fourth: Pattern(d, d_output),
fifth: Pattern(e, e_output),
sixth: Pattern(f, f_output),
seventh: Pattern(g, g_output),
) -> Pattern(
construct_to,
#(
a_output,
b_output,
c_output,
d_output,
e_output,
f_output,
g_output,
),
)
pub fn from_constructor8(
constructor: constructor.Constructor(
construct_to,
#(#(#(#(#(#(#(#(#(), a), b), c), d), e), f), g), h),
generics,
),
first: Pattern(a, a_output),
second: Pattern(b, b_output),
third: Pattern(c, c_output),
fourth: Pattern(d, d_output),
fifth: Pattern(e, e_output),
sixth: Pattern(f, f_output),
seventh: Pattern(g, g_output),
eighth: Pattern(h, h_output),
) -> Pattern(
construct_to,
#(
a_output,
b_output,
c_output,
d_output,
e_output,
f_output,
g_output,
h_output,
),
)
pub fn from_constructor9(
constructor: constructor.Constructor(
construct_to,
#(#(#(#(#(#(#(#(#(#(), a), b), c), d), e), f), g), h), i),
generics,
),
first: Pattern(a, a_output),
second: Pattern(b, b_output),
third: Pattern(c, c_output),
fourth: Pattern(d, d_output),
fifth: Pattern(e, e_output),
sixth: Pattern(f, f_output),
seventh: Pattern(g, g_output),
eighth: Pattern(h, h_output),
ninth: Pattern(i, i_output),
) -> Pattern(
construct_to,
#(
a_output,
b_output,
c_output,
d_output,
e_output,
f_output,
g_output,
h_output,
i_output,
),
)
pub fn from_constructor_dynamic(
constructor: constructor.Constructor(
construct_to,
any,
generics,
),
constructors: List(Pattern(types.Dynamic, types.Dynamic)),
) -> Pattern(
construct,
List(expression.Expression(types.Dynamic)),
)
pub fn get_output(pattern: Pattern(a, output)) -> output
pub fn int_literal(literal: Int) -> Pattern(Int, Nil)
pub fn list_empty() -> Pattern(List(a), Nil)
Renders []. List this branch before a catch-all (e.g. variable) so the empty case matches first.
pub fn list_first_discard_rest(
first: String,
) -> Pattern(List(a), expression.Expression(a))
Renders [first, ..] and binds the head element to first.
pub fn named_discard(name: String) -> Pattern(a, Nil)
pub fn option_some(
inner: Pattern(a, a_out),
) -> Pattern(option.Option(a), a_out)
Some(inner).
pub fn or(
first: Pattern(input, match_output),
second: Pattern(input, match_output),
) -> Pattern(input, match_output)
Use either of the two patterns
case_.new(expression.string("hello"))
|> case_.with_pattern(
pattern.or(pattern.string_literal("hello"), pattern.string_literal("hi")),
fn(_) { expression.string("world") },
)
|> case_.with_pattern(pattern.variable("v"), fn(v) {
expression.concat_string(v, expression.string(" world"))
})
|> case_.build_expression()
|> expression.render(render.default_context())
|> render.to_string()
// -> "case \"hello\" {
\"hello\" | \"hi\" -> \"world\"
v -> v <> \" world\"
}",
pub fn render(
pattern: Pattern(types.Dynamic, types.Dynamic),
number_of_subjects: Int,
) -> @internal Rendered
pub fn string_literal(literal: String) -> Pattern(a, Nil)
pub fn to_dynamic(
type_: Pattern(input, handler_output),
) -> Pattern(types.Dynamic, types.Dynamic)
pub fn tuple2(
pattern1: Pattern(a_input, a_output),
pattern2: Pattern(b_input, b_output),
) -> Pattern(#(a_input, b_input), #(a_output, b_output))
pub fn tuple3(
pattern1: Pattern(a_input, a_output),
pattern2: Pattern(b_input, b_output),
pattern3: Pattern(c_input, c_output),
) -> Pattern(
#(a_input, b_input, c_input),
#(a_output, b_output, c_output),
)
pub fn tuple4(
pattern1: Pattern(a_input, a_output),
pattern2: Pattern(b_input, b_output),
pattern3: Pattern(c_input, c_output),
pattern4: Pattern(d_input, d_output),
) -> Pattern(
#(a_input, b_input, c_input, d_input),
#(a_output, b_output, c_output, d_output),
)
pub fn tuple5(
pattern1: Pattern(a_input, a_output),
pattern2: Pattern(b_input, b_output),
pattern3: Pattern(c_input, c_output),
pattern4: Pattern(d_input, d_output),
pattern5: Pattern(e_input, e_output),
) -> Pattern(
#(a_input, b_input, c_input, d_input, e_input),
#(a_output, b_output, c_output, d_output, e_output),
)
pub fn tuple6(
pattern1: Pattern(a_input, a_output),
pattern2: Pattern(b_input, b_output),
pattern3: Pattern(c_input, c_output),
pattern4: Pattern(d_input, d_output),
pattern5: Pattern(e_input, e_output),
pattern6: Pattern(f_input, f_output),
) -> Pattern(
#(a_input, b_input, c_input, d_input, e_input, f_input),
#(a_output, b_output, c_output, d_output, e_output, f_output),
)
pub fn tuple7(
pattern1: Pattern(a_input, a_output),
pattern2: Pattern(b_input, b_output),
pattern3: Pattern(c_input, c_output),
pattern4: Pattern(d_input, d_output),
pattern5: Pattern(e_input, e_output),
pattern6: Pattern(f_input, f_output),
pattern7: Pattern(g_input, g_output),
) -> Pattern(
#(a_input, b_input, c_input, d_input, e_input, f_input, g_input),
#(
a_output,
b_output,
c_output,
d_output,
e_output,
f_output,
g_output,
),
)
pub fn tuple8(
pattern1: Pattern(a_input, a_output),
pattern2: Pattern(b_input, b_output),
pattern3: Pattern(c_input, c_output),
pattern4: Pattern(d_input, d_output),
pattern5: Pattern(e_input, e_output),
pattern6: Pattern(f_input, f_output),
pattern7: Pattern(g_input, g_output),
pattern8: Pattern(h_input, h_output),
) -> Pattern(
#(
a_input,
b_input,
c_input,
d_input,
e_input,
f_input,
g_input,
h_input,
),
#(
a_output,
b_output,
c_output,
d_output,
e_output,
f_output,
g_output,
h_output,
),
)
pub fn tuple9(
pattern1: Pattern(a_input, a_output),
pattern2: Pattern(b_input, b_output),
pattern3: Pattern(c_input, c_output),
pattern4: Pattern(d_input, d_output),
pattern5: Pattern(e_input, e_output),
pattern6: Pattern(f_input, f_output),
pattern7: Pattern(g_input, g_output),
pattern8: Pattern(h_input, h_output),
pattern9: Pattern(i_input, i_output),
) -> Pattern(
#(
a_input,
b_input,
c_input,
d_input,
e_input,
f_input,
g_input,
h_input,
i_input,
),
#(
a_output,
b_output,
c_output,
d_output,
e_output,
f_output,
g_output,
h_output,
i_output,
),
)
pub fn variable(
name: String,
) -> Pattern(a, expression.Expression(a))