Record patterns are written using syntax essentially identical to those of record expressions: A comma-separated list of pattern elements wrapped in curly brackets where each element consists of a name => value pair:
linux$ cat my-script #!/usr/bin/mythryl r = { name => "Kim", age => 17 }; # Record expression. case r { name => n, age => i } # Record pattern. => printf "%s is %d.\n" n i; esac; linux$ ./my-script Kim is 17.
Frequently record fields are pattern-matched into variables with the same names:
#!/usr/bin/mythryl r = { name => "Kim", age => 17 }; case r { name => name, age => age } => printf "%s is %d.\n" name age; esac; linux$ ./my-script Kim is 17.
In this case a special abbreviation is supported:
linux$ cat my-script #!/usr/bin/mythryl r = { name => "Kim", age => 17 }; case r { name, age } => printf "%s is %d.\n" name age; esac; linux$ ./my-script Kim is 17.
Record patterns may be nested arbitrarily with each other and with other types of patterns:
linux$ cat my-script #!/usr/bin/mythryl r = { name => "Kim", coordinate => (1121, 592) }; case r { name, coordinate => (i,j) } => printf "%s is at (%d,%d).\n" name i j; esac; linux$ ./my-script Kim is at (1121,592).