Files
storybook/examples/baker-family/behaviors/baker_behaviors.sb
Sienna Meridian Satterwhite 25d59d6107 feat(type-system): implement concept_comparison with pattern matching
Added complete support for the new type system syntax including:

- concept: Base type declarations
- sub_concept: Enum and record sub-type definitions
- concept_comparison: Compile-time pattern matching with conditional guards

Parser changes:
- Added VariantPattern, FieldCondition, and Condition AST nodes
- Implemented "is" keyword for pattern matching (e.g., "CupType is Glass or CupType is Plastic")
- Added Value::Any variant to support universal type matching
- Disambiguated enum-like vs record-like sub_concept syntax

LSP updates:
- Added Value::Any match arms across code_actions, completion, hover, inlay_hints, and semantic_tokens
- Type inference and formatting support for Any values

Example fixes:
- Fixed syntax error in baker-family behaviors (missing closing brace in nested if)
- Removed deprecated core_enums.sb file
2026-02-14 09:28:20 +00:00

210 lines
3.8 KiB
Plaintext

//! Behavior trees for the Baker family
//!
//! These are referenced by schedule blocks via the action: field
// Main baking work routine
behavior BakingWork {
then {
check_orders
prepare_ingredients
choose {
make_bread
make_pastries
make_cakes
}
bake
cool_products
package_goods
}
}
// Kitchen prep routine
behavior PrepKitchen {
then {
clean_surfaces
check_supplies
preheat_ovens
organize_workspace
}
}
// type
concept Vendor
// type
sub_concept VendorInventory {
Bread: any,
Pastries: any,
Cakes: any,
Cup: any
}
// type (but really just an enum lol)
concept Cup
// enum
sub_concept CupSize {
Small,
Medium,
Large
}
// enum
sub_concept CupType {
Ceramic,
Glass,
Plastic
}
// enum
sub_concept CupColor {
Red,
Blue,
Green
}
// enum comparison done at compile time
concept_comparison CustomerInterestInCups {
Interested: {
CupSize: any, // any means any value of the type can be matched
CupType: CupType is Glass or CupType is Plastic,
CupColor: CupColor is Red or CupColor is Blue
},
NotInterested: {
CupSize: any,
CupType: any,
CupColor: any
},
Maybe: {
CupSize: any,
CupType: any,
CupColor: any
}
}
// type
concept Plate
// enum
sub_concept PlateColor {
Blue,
Green,
Red
}
// type
concept Customer
// enum
sub_concept CustomerInterest {
Interested: 10,
NotInterested: 20,
Maybe: 70
}
// Market day selling behavior
behavior SellAtMarket {
repeat {
then {
greet_customer
show_products
if(CustomerInterestInCups.Interested.CupSize is Medium or CupSize is Large and CustomerInterestInCups.Interested.CupType is Glass or CupType is Plastic and CustomerInterestInCups.Interested.CupColor is Red or CupColor is Blue) {
make_sale(Cup)
}
if(CustomerInterestInCups.Interested.CupSize is Small and CustomerInterestInCups.Interested.CupType is Ceramic and CustomerInterestInCups.Interested.CupColor is Green) {
if (Plate.PlateColor is Blue or PlateColor is Green) {
// variadic arguments
make_sale(Cup, Plate)
}
}
// or there can be generic fallthroughs too
thank_customer
}
}
}
// Assistant work (subset of main baking)
behavior AssistWithBaking {
then {
check_orders
prepare_ingredients
choose {
assist_with_bread
assist_with_pastries
}
clean_workspace
}
}
// Quick morning prep
behavior QuickPrep {
then {
check_supplies
organize_workspace
}
}
concept Hunger
sub_concept HungerState {
Hungry,
NotHungry
}
// Basic needs (from Person template)
behavior BasicNeeds {
repeat {
choose {
if(HungryState.Hungry) { eat }
if(HungryState.NotHungry) { rest }
if(thirsty) { drink }
}
}
}
// Social interaction
behavior SocialInteraction {
choose {
greet_neighbors
chat_with_customers
family_time
}
}
// Baking skills
behavior BakingSkills {
then {
assess_dough
adjust_recipe
monitor_temperature
}
}
// Customer service
behavior CustomerService {
then {
greet_warmly
listen_to_needs
recommend_products
handle_payment
}
}
// Child behaviors
behavior PlayBehavior {
choose {
play_outside
play_with_toys
draw_pictures
}
}
behavior LearnBehavior {
then {
attend_school
do_homework
read_books
}
}