---
title: "Language limits"
image: "https://hem.run/social/hem.png"
---

> Documentation Index
> Fetch the complete documentation index at: https://hem.run/llms.txt
> Use this file to discover all available pages before exploring further.

# Language limits

Class extractors, guards in `catch` arms, and group-level `let`-`else` are not supported. Use `deriving Eq` for generated structural equality (§7) and explicit library values for boundary schemas. The [language boundaries reference](https://hem.run/reference/language-boundaries) lists supported alternatives.

Two distinctions matter when composing expressions:

A range is loop-head syntax rather than a value. `0..n` heads a `for`; use ordinary iterables elsewhere. Ranges are not first-class values.

Nested `try`, `match`, and statement-bearing `if` expressions work in supported ordinary and optional-call arguments and on the right of `&&`, `||`, and `??`. Synchronous postfix `catch` also works in supported nested value positions. The compiler preserves the receiver, argument order, and conditional execution; a skipped optional call does not evaluate its arguments. Method-tagged templates and arbitrary statement-block positions are not generally supported. Keep branches explicit and bind intermediate values in unsupported positions. See [control flow](https://hem.run/reference/control-flow) for the supported forms.

Source: https://hem.run/tour/language-limits/index.mdx
