gleamgen/pattern

Types

pub opaque type Pattern(input, match_output)

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 discard() -> Pattern(a, Nil)
pub fn error(
  err_pattern: Pattern(a, a_output),
) -> Pattern(Result(ok, a), a_output)
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 ok(
  ok_pattern: Pattern(a, a_output),
) -> Pattern(Result(a, err), a_output)
pub fn option_none() -> Pattern(option.Option(a), Nil)

None.

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 tuple0() -> Pattern(#(), Nil)
pub fn tuple1(
  pattern: Pattern(a_input, a_output),
) -> Pattern(#(a_input), #(a_output))
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))
Search Document