Skip to content

Instantly share code, notes, and snippets.

@podhmo
Last active January 30, 2026 10:05
Show Gist options
  • Select an option

  • Save podhmo/c176db2a047dcb60ee32ec0cee85744f to your computer and use it in GitHub Desktop.

Select an option

Save podhmo/c176db2a047dcb60ee32ec0cee85744f to your computer and use it in GitHub Desktop.
moonbit online

kimiでつくらせた

moonbitのいろいろな機能を使った1ファイルのコードを作ってください。ただし使えるのは標準ライブラリまでです。 https://docs.moonbitlang.com/en/latest/tutorial/for-go-programmers/index.html を参考にしてください。

以下は、MoonBitの様々な機能(列挙型、パターンマッチング、トレイト、エラーハンドリング、ジェネリック、制御フローなど)を網羅したシングルファイルのサンプルコードです。

https://podhmo.github.io/moonbit-online/#JTJGJTJGJTIwJTNEJTNEJTNEJTNEJTNEJTNEJTNEJTNEJTNEJTNEJTNEJTNEJTNEJTNEJTNEJTNEJTNEJTNEJTNEJTNEJTNEJTNEJTNEJTNEJTNEJTNEJTNEJTNEJTNEJTNEJTNEJTNEJTNEJTNEJTNEJTNEJTNEJTNEJTNEJTNEJTNEJTNEJTNEJTNEJTBBJTJGJTJGJTIwTW9vbkJpdCUyMENvbXByZWhlbnNpdmUlMjBGZWF0dXJlJTIwRGVtbyUwQSUyRiUyRiUyMFN0YW5kYXJkJTIwTGlicmFyeSUyME9ubHklMEElMkYlMkYlMjAlM0QlM0QlM0QlM0QlM0QlM0QlM0QlM0QlM0QlM0QlM0QlM0QlM0QlM0QlM0QlM0QlM0QlM0QlM0QlM0QlM0QlM0QlM0QlM0QlM0QlM0QlM0QlM0QlM0QlM0QlM0QlM0QlM0QlM0QlM0QlM0QlM0QlM0QlM0QlM0QlM0QlM0QlM0QlM0QlMEElMEElMkYlMkYlMjAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tJTBBJTJGJTJGJTIwMS4lMjBFcnJvciUyMFR5cGVzJTIwKHN1YmVycm9yKSUwQSUyRiUyRiUyMC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0lMEFzdWJlcnJvciUyMEV2YWxFcnJvciUyMCU3QiUwQSUyMCUyMERpdkJ5WmVybyUwQSUyMCUyMFVua25vd25WYXJpYWJsZShTdHJpbmcpJTBBJTdEJTBBJTBBJTJGJTJGJTIwLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSUwQSUyRiUyRiUyMDIuJTIwQWxnZWJyYWljJTIwRGF0YSUyMFR5cGVzJTIwKEVudW0lMjB3aXRoJTIwcGF5bG9hZHMpJTBBJTJGJTJGJTIwLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSUwQWVudW0lMjBFeHByZXNzaW9uJTIwJTdCJTBBJTIwJTIwTnVtYmVyKERvdWJsZSklMEElMjAlMjBWYXJpYWJsZShTdHJpbmcpJTBBJTIwJTIwQWRkKEV4cHJlc3Npb24lMkMlMjBFeHByZXNzaW9uKSUwQSUyMCUyME11bChFeHByZXNzaW9uJTJDJTIwRXhwcmVzc2lvbiklMEElMjAlMjBEaXYoRXhwcmVzc2lvbiUyQyUyMEV4cHJlc3Npb24pJTBBJTIwJTIwTGV0KFN0cmluZyUyQyUyMEV4cHJlc3Npb24lMkMlMjBFeHByZXNzaW9uKSUyMCUyMCUyRiUyRiUyMGxldCUyMHglMjAlM0QlMjBlMSUyMGluJTIwZTIlMEElN0QlMEElMEElMkYlMkYlMjAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tJTBBJTJGJTJGJTIwMy4lMjBTdHJ1Y3RzJTIwd2l0aCUyMG11dCUyMGZpZWxkcyUwQSUyRiUyRiUyMC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0lMEFzdHJ1Y3QlMjBFbnZpcm9ubWVudCUyMCU3QiUwQSUyMCUyMGJpbmRpbmdzJTIwJTNBJTIwTWFwJTVCU3RyaW5nJTJDJTIwRG91YmxlJTVEJTBBJTIwJTIwbXV0JTIwZXZhbF9jb3VudCUyMCUzQSUyMEludCUwQSU3RCUwQSUwQXN0cnVjdCUyMFN0YXRzJTIwJTdCJTBBJTIwJTIwc3VtJTIwJTNBJTIwRG91YmxlJTBBJTIwJTIwbWVhbiUyMCUzQSUyMERvdWJsZSUwQSUyMCUyMHNhbXBsZXMlMjAlM0ElMjBBcnJheSU1QkRvdWJsZSU1RCUwQSU3RCUwQSUwQSUyRiUyRiUyMC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0lMEElMkYlMkYlMjA0LiUyMFRyYWl0cyUyMChUeXBlJTIwQ2xhc3NlcyklMEElMkYlMkYlMjAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tJTBBdHJhaXQlMjBTaG93JTIwJTdCJTBBJTIwJTIwdG9fc3RyaW5nKFNlbGYpJTIwLSUzRSUyMFN0cmluZyUwQSU3RCUwQSUwQSUyRiUyRiUyMC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0lMEElMkYlMkYlMjA1LiUyME1ldGhvZHMlMjBhbmQlMjBUcmFpdCUyMEltcGxlbWVudGF0aW9ucyUwQSUyRiUyRiUyMC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0lMEElMEElMkYlMkYlMjBFbnZpcm9ubWVudCUyMG1ldGhvZHMlMEFmbiUyMEVudmlyb25tZW50JTNBJTNBbmV3KCklMjAtJTNFJTIwRW52aXJvbm1lbnQlMjAlN0IlMEElMjAlMjAlN0IlMjBiaW5kaW5ncyUzQSUyME1hcCUzQSUzQW5ldygpJTJDJTIwZXZhbF9jb3VudCUzQSUyMDAlMjAlN0QlMEElN0QlMEElMEFmbiUyMEVudmlyb25tZW50JTNBJTNBZXh0ZW5kKHNlbGYlMjAlM0ElMjBFbnZpcm9ubWVudCUyQyUyMG5hbWUlMjAlM0ElMjBTdHJpbmclMkMlMjB2YWx1ZSUyMCUzQSUyMERvdWJsZSklMjAtJTNFJTIwRW52aXJvbm1lbnQlMjAlN0IlMEElMjAlMjBsZXQlMjBuZXdfYmluZGluZ3MlMjAlM0QlMjBzZWxmLmJpbmRpbmdzLmNvcHkoKSUwQSUyMCUyMG5ld19iaW5kaW5ncy5zZXQobmFtZSUyQyUyMHZhbHVlKSUwQSUyMCUyMCU3QiUyMGJpbmRpbmdzJTNBJTIwbmV3X2JpbmRpbmdzJTJDJTIwZXZhbF9jb3VudCUzQSUyMHNlbGYuZXZhbF9jb3VudCUyMCU3RCUwQSU3RCUwQSUwQWZuJTIwRW52aXJvbm1lbnQlM0ElM0Fsb29rdXAoc2VsZiUyMCUzQSUyMEVudmlyb25tZW50JTJDJTIwbmFtZSUyMCUzQSUyMFN0cmluZyklMjAtJTNFJTIwRG91YmxlJTNGJTIwJTdCJTBBJTIwJTIwc2VsZi5ldmFsX2NvdW50JTIwJTNEJTIwc2VsZi5ldmFsX2NvdW50JTIwJTJCJTIwMSUwQSUyMCUyMHNlbGYuYmluZGluZ3MuZ2V0KG5hbWUpJTBBJTdEJTBBJTBBJTJGJTJGJTIwU2hvdyUyMHRyYWl0JTIwZm9yJTIwRXhwcmVzc2lvbiUwQWltcGwlMjBTaG93JTIwZm9yJTIwRXhwcmVzc2lvbiUyMHdpdGglMjB0b19zdHJpbmcoc2VsZiklMjAlN0IlMEElMjAlMjBtYXRjaCUyMHNlbGYlMjAlN0IlMEElMjAlMjAlMjAlMjBOdW1iZXIobiklMjAlM0QlM0UlMjBuLnRvX3N0cmluZygpJTBBJTIwJTIwJTIwJTIwVmFyaWFibGUobmFtZSklMjAlM0QlM0UlMjBuYW1lJTBBJTIwJTIwJTIwJTIwQWRkKGUxJTJDJTIwZTIpJTIwJTNEJTNFJTIwJTIyKCU1QyU3QmUxLnRvX3N0cmluZygpJTdEJTIwJTJCJTIwJTVDJTdCZTIudG9fc3RyaW5nKCklN0QpJTIyJTBBJTIwJTIwJTIwJTIwTXVsKGUxJTJDJTIwZTIpJTIwJTNEJTNFJTIwJTIyKCU1QyU3QmUxLnRvX3N0cmluZygpJTdEJTIwKiUyMCU1QyU3QmUyLnRvX3N0cmluZygpJTdEKSUyMiUwQSUyMCUyMCUyMCUyMERpdihlMSUyQyUyMGUyKSUyMCUzRCUzRSUyMCUyMiglNUMlN0JlMS50b19zdHJpbmcoKSU3RCUyMCUyRiUyMCU1QyU3QmUyLnRvX3N0cmluZygpJTdEKSUyMiUwQSUyMCUyMCUyMCUyMExldChuYW1lJTJDJTIwZTElMkMlMjBlMiklMjAlM0QlM0UlMjAlMjIobGV0JTIwJTVDJTdCbmFtZSU3RCUyMCUzRCUyMCU1QyU3QmUxLnRvX3N0cmluZygpJTdEJTIwaW4lMjAlNUMlN0JlMi50b19zdHJpbmcoKSU3RCklMjIlMEElMjAlMjAlN0QlMEElN0QlMEElMEElMkYlMkYlMjBTaG93JTIwZm9yJTIwU3RhdHMlMEFpbXBsJTIwU2hvdyUyMGZvciUyMFN0YXRzJTIwd2l0aCUyMHRvX3N0cmluZyhzZWxmKSUyMCU3QiUwQSUyMCUyMCUyMlN0YXRzKG1lYW4lM0ElMjAlNUMlN0JzZWxmLm1lYW4lN0QlMkMlMjBzdW0lM0ElMjAlNUMlN0JzZWxmLnN1bSU3RCUyQyUyMG4lM0ElMjAlNUMlN0JzZWxmLnNhbXBsZXMubGVuZ3RoKCklN0QpJTIyJTBBJTdEJTBBJTBBJTJGJTJGJTIwLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSUwQSUyRiUyRiUyMDYuJTIwUGF0dGVybiUyME1hdGNoaW5nJTIwJTI2JTIwRXJyb3IlMjBIYW5kbGluZyUwQSUyRiUyRiUyMC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0lMEElMEFmbiUyMEV4cHJlc3Npb24lM0ElM0FldmFsKHNlbGYlMjAlM0ElMjBFeHByZXNzaW9uJTJDJTIwZW52JTIwJTNBJTIwRW52aXJvbm1lbnQpJTIwLSUzRSUyMERvdWJsZSUyMHJhaXNlJTIwRXZhbEVycm9yJTIwJTdCJTBBJTIwJTIwbWF0Y2glMjBzZWxmJTIwJTdCJTBBJTIwJTIwJTIwJTIwTnVtYmVyKG4pJTIwJTNEJTNFJTIwbiUwQSUyMCUyMCUyMCUyMFZhcmlhYmxlKG5hbWUpJTIwJTNEJTNFJTIwJTdCJTBBJTIwJTIwJTIwJTIwJTIwJTIwbWF0Y2glMjBlbnYubG9va3VwKG5hbWUpJTIwJTdCJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwU29tZSh2KSUyMCUzRCUzRSUyMHYlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBOb25lJTIwJTNEJTNFJTIwcmFpc2UlMjBFdmFsRXJyb3IlM0ElM0FVbmtub3duVmFyaWFibGUobmFtZSklMEElMjAlMjAlMjAlMjAlMjAlMjAlN0QlMEElMjAlMjAlMjAlMjAlN0QlMEElMjAlMjAlMjAlMjBBZGQoZTElMkMlMjBlMiklMjAlM0QlM0UlMjBlMS5ldmFsKGVudiklMjAlMkIlMjBlMi5ldmFsKGVudiklMEElMjAlMjAlMjAlMjBNdWwoZTElMkMlMjBlMiklMjAlM0QlM0UlMjBlMS5ldmFsKGVudiklMjAqJTIwZTIuZXZhbChlbnYpJTBBJTIwJTIwJTIwJTIwRGl2KGUxJTJDJTIwZTIpJTIwJTNEJTNFJTIwJTdCJTBBJTIwJTIwJTIwJTIwJTIwJTIwbGV0JTIwZGl2aXNvciUyMCUzRCUyMGUyLmV2YWwoZW52KSUwQSUyMCUyMCUyMCUyMCUyMCUyMGlmJTIwZGl2aXNvciUyMCUzRCUzRCUyMDAuMCUyMCU3QiUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMHJhaXNlJTIwRXZhbEVycm9yJTNBJTNBRGl2QnlaZXJvJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTdEJTBBJTIwJTIwJTIwJTIwJTIwJTIwZTEuZXZhbChlbnYpJTIwJTJGJTIwZGl2aXNvciUwQSUyMCUyMCUyMCUyMCU3RCUwQSUyMCUyMCUyMCUyMExldChuYW1lJTJDJTIwZTElMkMlMjBlMiklMjAlM0QlM0UlMjAlN0IlMEElMjAlMjAlMjAlMjAlMjAlMjBsZXQlMjB2YWwlMjAlM0QlMjBlMS5ldmFsKGVudiklMEElMjAlMjAlMjAlMjAlMjAlMjBsZXQlMjBuZXdfZW52JTIwJTNEJTIwZW52LmV4dGVuZChuYW1lJTJDJTIwdmFsKSUwQSUyMCUyMCUyMCUyMCUyMCUyMGUyLmV2YWwobmV3X2VudiklMEElMjAlMjAlMjAlMjAlN0QlMEElMjAlMjAlN0QlMEElN0QlMEElMEElMkYlMkYlMjAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tJTBBJTJGJTJGJTIwNy4lMjBHZW5lcmljJTIwRnVuY3Rpb25zJTIwJTI2JTIwTmFtZWQlMjBQYXJhbWV0ZXJzJTBBJTJGJTJGJTIwLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSUwQSUwQWZuJTVCVCU1RCUyMG9wdGlvbl9vcl9kZWZhdWx0KG9wdCUyMCUzQSUyMFQlM0YlMkMlMjBkZWZhdWx0fiUyMCUzQSUyMFQpJTIwLSUzRSUyMFQlMjAlN0IlMEElMjAlMjBtYXRjaCUyMG9wdCUyMCU3QiUwQSUyMCUyMCUyMCUyMFNvbWUodiklMjAlM0QlM0UlMjB2JTBBJTIwJTIwJTIwJTIwTm9uZSUyMCUzRCUzRSUyMGRlZmF1bHQlMEElMjAlMjAlN0QlMEElN0QlMEElMEFmbiU1QlQlMkMlMjBVJTJDJTIwRSU1RCUyMHJlc3VsdF9tYXAocmVzdWx0JTIwJTNBJTIwUmVzdWx0JTVCVCUyQyUyMEUlNUQlMkMlMjBmJTIwJTNBJTIwKFQpJTIwLSUzRSUyMFUpJTIwLSUzRSUyMFJlc3VsdCU1QlUlMkMlMjBFJTVEJTIwJTdCJTBBJTIwJTIwbWF0Y2glMjByZXN1bHQlMjAlN0IlMEElMjAlMjAlMjAlMjBPayh2KSUyMCUzRCUzRSUyME9rKGYodikpJTBBJTIwJTIwJTIwJTIwRXJyKGUpJTIwJTNEJTNFJTIwRXJyKGUpJTBBJTIwJTIwJTdEJTBBJTdEJTBBJTBBJTJGJTJGJTIwTmFtZWQlMjBwYXJhbWV0ZXJzJTIwd2l0aCUyMGRlZmF1bHRzJTBBZm4lMjBjcmVhdGVfc3RhdHMoJTBBJTIwJTIwZGF0YSUyMCUzQSUyMEFycmF5JTVCRG91YmxlJTVEJTJDJTBBJTIwJTIwaW5jbHVkZV9tZWFufiUyMCUzQSUyMEJvb2wlMjAlM0QlMjB0cnVlJTBBKSUyMC0lM0UlMjBTdGF0cyUyMCU3QiUwQSUyMCUyMGxldCUyMG4lMjAlM0QlMjBkYXRhLmxlbmd0aCgpJTBBJTIwJTIwbGV0JTIwc3VtJTIwJTNEJTIwaWYlMjBuJTIwJTNEJTNEJTIwMCUyMCU3QiUwQSUyMCUyMCUyMCUyMDAuMCUwQSUyMCUyMCU3RCUyMGVsc2UlMjAlN0IlMEElMjAlMjAlMjAlMjAlMkYlMkYlMjBMb29wJTIwZXhwcmVzc2lvbiUyMHdpdGglMjBhY2N1bXVsYXRvciUwQSUyMCUyMCUyMCUyMGxvb3AlMjAoMCUyQyUyMDAuMCklMjAlN0IlMEElMjAlMjAlMjAlMjAlMjAlMjAoaSUyQyUyMGFjYyklMjAlM0QlM0UlMjAlN0IlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBpZiUyMGklMjAlM0UlM0QlMjBuJTIwJTdCJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwYnJlYWslMjBhY2MlMjAlMjAlMkYlMkYlMjBicmVhayUyMHJldHVybnMlMjB2YWx1ZSUyMGZyb20lMjBsb29wJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTdEJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwY29udGludWUlMjAoaSUyMCUyQiUyMDElMkMlMjBhY2MlMjAlMkIlMjBkYXRhJTVCaSU1RCklMEElMjAlMjAlMjAlMjAlMjAlMjAlN0QlMEElMjAlMjAlMjAlMjAlN0QlMEElMjAlMjAlN0QlMEElMjAlMjAlMEElMjAlMjBsZXQlMjBtZWFuJTIwJTNEJTIwaWYlMjBpbmNsdWRlX21lYW4lMjAlMjYlMjYlMjBuJTIwJTNFJTIwMCUyMCU3QiUwQSUyMCUyMCUyMCUyMHN1bSUyMCUyRiUyMG4udG9fZG91YmxlKCklMEElMjAlMjAlN0QlMjBlbHNlJTIwJTdCJTBBJTIwJTIwJTIwJTIwMC4wJTBBJTIwJTIwJTdEJTBBJTIwJTIwJTBBJTIwJTIwJTdCJTIwc3VtJTJDJTIwbWVhbiUyQyUyMHNhbXBsZXMlM0ElMjBkYXRhJTIwJTdEJTBBJTdEJTBBJTBBJTJGJTJGJTIwLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSUwQSUyRiUyRiUyMDguJTIwQXJyYXklMjBPcGVyYXRpb25zJTIwJTI2JTIwUGF0dGVybiUyME1hdGNoaW5nJTBBJTJGJTJGJTIwLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSUwQSUwQWZuJTIwYW5hbHl6ZV9saXN0KGxzdCUyMCUzQSUyMEFycmF5JTVCSW50JTVEKSUyMC0lM0UlMjBTdHJpbmclMjAlN0IlMEElMjAlMjBtYXRjaCUyMGxzdCUyMCU3QiUwQSUyMCUyMCUyMCUyMCU1QiU1RCUyMCUzRCUzRSUyMCUyMkVtcHR5JTIwbGlzdCUyMiUwQSUyMCUyMCUyMCUyMCU1QnglNUQlMjAlM0QlM0UlMjAlMjJTaW5nbGUlMjBlbGVtZW50JTNBJTIwJTVDJTdCeCU3RCUyMiUwQSUyMCUyMCUyMCUyMCU1QmZpcnN0JTJDJTIwc2Vjb25kJTJDJTIwLi4lMjByZXN0JTVEJTIwJTNEJTNFJTIwJTdCJTBBJTIwJTIwJTIwJTIwJTIwJTIwbGV0JTIwbGVuJTIwJTNEJTIwbHN0Lmxlbmd0aCgpJTBBJTIwJTIwJTIwJTIwJTIwJTIwbGV0JTIwcmVzdF9zdW0lMjAlM0QlMjBsb29wJTIwKDAlMkMlMjAwKSUyMCU3QiUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMChpJTJDJTIwYWNjKSUyMCUzRCUzRSUyMCU3QiUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMGlmJTIwaSUyMCUzRSUzRCUyMHJlc3QubGVuZ3RoKCklMjAlN0IlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBicmVhayUyMGFjYyUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCU3RCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMGNvbnRpbnVlJTIwKGklMjAlMkIlMjAxJTJDJTIwYWNjJTIwJTJCJTIwcmVzdCU1QmklNUQpJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTdEJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTdEJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIyRmlyc3QlMjB0d28lM0ElMjAlNUMlN0JmaXJzdCU3RCUyQyUyMCU1QyU3QnNlY29uZCU3RCUzQiUyMFRvdGFsJTIwbGVuZ3RoJTNBJTIwJTVDJTdCbGVuJTdEJTNCJTIwUmVzdCUyMHN1bSUzQSUyMCU1QyU3QnJlc3Rfc3VtJTdEJTIyJTBBJTIwJTIwJTIwJTIwJTdEJTBBJTIwJTIwJTdEJTBBJTdEJTBBJTBBZm4lMjBhcnJheV9zdW0oYXJyJTIwJTNBJTIwQXJyYXklNUJJbnQlNUQpJTIwLSUzRSUyMEludCUyMCU3QiUwQSUyMCUyMCUyRiUyRiUyMEZvciUyMGxvb3AlMjBhcyUyMGV4cHJlc3Npb24lMEElMjAlMjBmb3IlMjBpJTIwJTNEJTIwMCUyQyUyMGFjYyUyMCUzRCUyMDAlM0IlMjBpJTIwJTNDJTIwYXJyLmxlbmd0aCgpJTNCJTIwaSUyMCUzRCUyMGklMjAlMkIlMjAxJTIwJTdCJTBBJTIwJTIwJTIwJTIwY29udGludWUlMjBpJTIwJTJCJTIwMSUyQyUyMGFjYyUyMCUyQiUyMGFyciU1QmklNUQlMEElMjAlMjAlN0QlMjBlbHNlJTIwJTdCJTBBJTIwJTIwJTIwJTIwYWNjJTBBJTIwJTIwJTdEJTBBJTdEJTBBJTBBJTJGJTJGJTIwLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSUwQSUyRiUyRiUyMDkuJTIwU3RyaW5nJTIwUHJvY2Vzc2luZyUyMHdpdGglMjBWaWV3cyUwQSUyRiUyRiUyMC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0lMEElMEFmbiUyMGlzX3BhbGluZHJvbWUocyUyMCUzQSUyMFN0cmluZyklMjAtJTNFJTIwQm9vbCUyMCU3QiUwQSUyMCUyMGxldCUyMHZpZXclMjAlM0QlMjBzLnZpZXcoKSUwQSUyMCUyMGZuJTIwY2hlY2sodiUyMCUzQSUyMFN0cmluZ1ZpZXcpJTIwLSUzRSUyMEJvb2wlMjAlN0IlMEElMjAlMjAlMjAlMjBtYXRjaCUyMHYlMjAlN0IlMEElMjAlMjAlMjAlMjAlMjAlMjAlNUIlNUQlMjAlN0MlMjAlNUJfJTVEJTIwJTNEJTNFJTIwdHJ1ZSUwQSUyMCUyMCUyMCUyMCUyMCUyMCU1QmZpcnN0JTJDJTIwLi4lMjByZXN0JTJDJTIwbGFzdCU1RCUyMCUzRCUzRSUyMCU3QiUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMGlmJTIwZmlyc3QlMjAlM0QlM0QlMjBsYXN0JTIwJTdCJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwY2hlY2socmVzdCklMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlN0QlMjBlbHNlJTIwJTdCJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwZmFsc2UlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlN0QlMEElMjAlMjAlMjAlMjAlMjAlMjAlN0QlMEElMjAlMjAlMjAlMjAlN0QlMEElMjAlMjAlN0QlMEElMjAlMjBjaGVjayh2aWV3KSUwQSU3RCUwQSUwQSUyRiUyRiUyMC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0lMEElMkYlMkYlMjAxMC4lMjBNYWluJTIwRnVuY3Rpb24lMjAtJTIwRGVtb25zdHJhdGlvbiUwQSUyRiUyRiUyMC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0lMEElMEFmbiUyMG1haW4lMjAlN0IlMEElMjAlMjBwcmludGxuKCUyMiUzRCUzRCUzRCUyME1vb25CaXQlMjBGZWF0dXJlJTIwU2hvd2Nhc2UlMjAlM0QlM0QlM0QlNUNuJTIyKSUwQSUyMCUyMCUwQSUyMCUyMCUyRiUyRiUyMC0tJTIwVmFyaWFibGUlMjBiaW5kaW5ncyUyMC0tJTBBJTIwJTIwbGV0JTIwaW1tdXRhYmxlX3ZhbCUyMCUzRCUyMDQyJTBBJTIwJTIwbGV0JTIwbXV0JTIwbXV0YWJsZV92YWwlMjAlM0QlMjAwJTBBJTIwJTIwbXV0YWJsZV92YWwlMjAlM0QlMjBpbW11dGFibGVfdmFsJTIwJTJGJTIwMiUwQSUyMCUyMCUwQSUyMCUyMHByaW50bG4oJTIySW1tdXRhYmxlJTNBJTIwJTVDJTdCaW1tdXRhYmxlX3ZhbCU3RCUyQyUyME11dGFibGUlM0ElMjAlNUMlN0JtdXRhYmxlX3ZhbCU3RCUyMiklMEElMjAlMjAlMEElMjAlMjAlMkYlMkYlMjAtLSUyMEV4cHJlc3Npb24lMjBldmFsdWF0aW9uJTIwd2l0aCUyMGVycm9yJTIwaGFuZGxpbmclMjAtLSUwQSUyMCUyMGxldCUyMGVudiUyMCUzRCUyMEVudmlyb25tZW50JTNBJTNBbmV3KCklMEElMjAlMjBsZXQlMjBleHByJTIwJTNEJTIwTGV0KCUyMnglMjIlMkMlMjAlMEElMjAlMjAlMjAlMjBOdW1iZXIoMTAuMCklMkMlMEElMjAlMjAlMjAlMjBBZGQoJTBBJTIwJTIwJTIwJTIwJTIwJTIwVmFyaWFibGUoJTIyeCUyMiklMkMlMEElMjAlMjAlMjAlMjAlMjAlMjBNdWwoTnVtYmVyKDIuMCklMkMlMjBEaXYoTnVtYmVyKDYuMCklMkMlMjBOdW1iZXIoMi4wKSkpJTBBJTIwJTIwJTIwJTIwKSUwQSUyMCUyMCklMEElMjAlMjAlMEElMjAlMjBwcmludGxuKCUyMiU1Q25FeHByZXNzaW9uJTNBJTIwJTVDJTdCZXhwci50b19zdHJpbmcoKSU3RCUyMiklMEElMjAlMjAlMEElMjAlMjB0cnklMjAlN0IlMEElMjAlMjAlMjAlMjBsZXQlMjByZXN1bHQlMjAlM0QlMjBleHByLmV2YWwoZW52KSUwQSUyMCUyMCUyMCUyMHByaW50bG4oJTIyRXZhbHVhdGVkJTIwdG8lM0ElMjAlNUMlN0JyZXN1bHQlN0QlMjIpJTBBJTIwJTIwJTIwJTIwcHJpbnRsbiglMjJUb3RhbCUyMHZhcmlhYmxlJTIwbG9va3VwcyUzQSUyMCU1QyU3QmVudi5ldmFsX2NvdW50JTdEJTIyKSUwQSUyMCUyMCU3RCUyMGNhdGNoJTIwJTdCJTBBJTIwJTIwJTIwJTIwRXZhbEVycm9yJTNBJTNBRGl2QnlaZXJvJTIwJTNEJTNFJTIwcHJpbnRsbiglMjJFcnJvciUzQSUyMERpdmlzaW9uJTIwYnklMjB6ZXJvISUyMiklMEElMjAlMjAlMjAlMjBFdmFsRXJyb3IlM0ElM0FVbmtub3duVmFyaWFibGUobmFtZSklMjAlM0QlM0UlMjBwcmludGxuKCUyMkVycm9yJTNBJTIwVW5rbm93biUyMHZhcmlhYmxlJTIwJyU1QyU3Qm5hbWUlN0QnJTIyKSUwQSUyMCUyMCU3RCUwQSUyMCUyMCUwQSUyMCUyMCUyRiUyRiUyMC0tJTIwTG9vcCUyMGV4cHJlc3Npb25zJTIwLS0lMEElMjAlMjBwcmludGxuKCUyMiU1Q24tLSUyMExvb3AlMjBFeHByZXNzaW9ucyUyMC0tJTIyKSUwQSUyMCUyMGxldCUyMGZhY3RvcmlhbF81JTIwJTNEJTIwbG9vcCUyMCg1JTJDJTIwMSklMjAlN0IlMEElMjAlMjAlMjAlMjAobiUyQyUyMGFjYyklMjAlM0QlM0UlMjAlN0IlMEElMjAlMjAlMjAlMjAlMjAlMjBpZiUyMG4lMjAlM0MlM0QlMjAxJTIwJTdCJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwYnJlYWslMjBhY2MlMEElMjAlMjAlMjAlMjAlMjAlMjAlN0QlMEElMjAlMjAlMjAlMjAlMjAlMjBjb250aW51ZSUyMChuJTIwLSUyMDElMkMlMjBhY2MlMjAqJTIwbiklMEElMjAlMjAlMjAlMjAlN0QlMEElMjAlMjAlN0QlMEElMjAlMjBwcmludGxuKCUyMjUhJTIwJTNEJTIwJTVDJTdCZmFjdG9yaWFsXzUlN0QlMjIpJTBBJTIwJTIwJTBBJTIwJTIwJTJGJTJGJTIwLS0lMjBGb3IlMjBsb29wJTIwYXMlMjBleHByZXNzaW9uJTIwLS0lMEElMjAlMjBsZXQlMjBudW1iZXJzJTIwJTNEJTIwJTVCMSUyQyUyMDIlMkMlMjAzJTJDJTIwNCUyQyUyMDUlMkMlMjA2JTJDJTIwNyUyQyUyMDglMkMlMjA5JTJDJTIwMTAlNUQlMEElMjAlMjBsZXQlMjBzdW1fZXZlbiUyMCUzRCUyMGZvciUyMGklMjAlM0QlMjAwJTJDJTIwc3VtJTIwJTNEJTIwMCUzQiUyMGklMjAlM0MlMjBudW1iZXJzLmxlbmd0aCgpJTNCJTIwaSUyMCUzRCUyMGklMjAlMkIlMjAxJTIwJTdCJTBBJTIwJTIwJTIwJTIwaWYlMjBudW1iZXJzJTVCaSU1RCUyMCUyNSUyMDIlMjAlM0QlM0QlMjAwJTIwJTdCJTBBJTIwJTIwJTIwJTIwJTIwJTIwY29udGludWUlMjBpJTIwJTJCJTIwMSUyQyUyMHN1bSUyMCUyQiUyMG51bWJlcnMlNUJpJTVEJTBBJTIwJTIwJTIwJTIwJTdEJTIwZWxzZSUyMCU3QiUwQSUyMCUyMCUyMCUyMCUyMCUyMGNvbnRpbnVlJTIwaSUyMCUyQiUyMDElMkMlMjBzdW0lMEElMjAlMjAlMjAlMjAlN0QlMEElMjAlMjAlN0QlMjBlbHNlJTIwJTdCJTBBJTIwJTIwJTIwJTIwc3VtJTBBJTIwJTIwJTdEJTBBJTIwJTIwcHJpbnRsbiglMjJTdW0lMjBvZiUyMGV2ZW4lMjBudW1iZXJzJTNBJTIwJTVDJTdCc3VtX2V2ZW4lN0QlMjIpJTBBJTIwJTIwJTBBJTIwJTIwJTJGJTJGJTIwLS0lMjBXaGlsZSUyMGxvb3AlMjB3aXRoJTIwYnJlYWslMjB2YWx1ZSUyMC0tJTBBJTIwJTIwbGV0JTIwbXV0JTIwY291bnQlMjAlM0QlMjAwJTBBJTIwJTIwbGV0JTIwZm91bmQlMjAlM0QlMjB3aGlsZSUyMGNvdW50JTIwJTNDJTIwMTAwJTIwJTdCJTBBJTIwJTIwJTIwJTIwY291bnQlMjAlM0QlMjBjb3VudCUyMCUyQiUyMDclMEElMjAlMjAlMjAlMjBpZiUyMGNvdW50JTIwJTNFJTIwNTAlMjAlN0IlMEElMjAlMjAlMjAlMjAlMjAlMjBicmVhayUyMCUyMkZvdW5kJTIwYXQlMjAlNUMlN0Jjb3VudCU3RCUyMiUwQSUyMCUyMCUyMCUyMCU3RCUwQSUyMCUyMCU3RCUyMGVsc2UlMjAlN0IlMEElMjAlMjAlMjAlMjAlMjJOb3QlMjBmb3VuZCUyMiUwQSUyMCUyMCU3RCUwQSUyMCUyMHByaW50bG4oJTIyV2hpbGUlMjByZXN1bHQlM0ElMjAlNUMlN0Jmb3VuZCU3RCUyMiklMEElMjAlMjAlMEElMjAlMjAlMkYlMkYlMjAtLSUyMFBhdHRlcm4lMjBtYXRjaGluZyUyMG9uJTIwYXJyYXlzJTIwLS0lMEElMjAlMjBwcmludGxuKCUyMiU1Q24tLSUyMEFycmF5JTIwUGF0dGVybnMlMjAtLSUyMiklMEElMjAlMjBsZXQlMjB0ZXN0X2xpc3QlMjAlM0QlMjAlNUIxJTJDJTIwMiUyQyUyMDMlMkMlMjA0JTJDJTIwNSU1RCUwQSUyMCUyMHByaW50bG4oYW5hbHl6ZV9saXN0KHRlc3RfbGlzdCkpJTBBJTIwJTIwJTBBJTIwJTIwJTJGJTJGJTIwLS0lMjBPcHRpb24lMjBhbmQlMjBSZXN1bHQlMjB0eXBlcyUyMC0tJTBBJTIwJTIwcHJpbnRsbiglMjIlNUNuLS0lMjBPcHRpb25hbCUyMFZhbHVlcyUyMC0tJTIyKSUwQSUyMCUyMGxldCUyMG1heWJlX3ZhbHVlJTIwJTNBJTIwSW50JTNGJTIwJTNEJTIwU29tZSg0MiklMEElMjAlMjBsZXQlMjBkZWZhdWx0ZWQlMjAlM0QlMjBvcHRpb25fb3JfZGVmYXVsdChtYXliZV92YWx1ZSUyQyUyMGRlZmF1bHQlM0QwKSUwQSUyMCUyMHByaW50bG4oJTIyT3B0aW9uJTIwdmFsdWUlM0ElMjAlNUMlN0JkZWZhdWx0ZWQlN0QlMjIpJTBBJTIwJTIwJTBBJTIwJTIwbGV0JTIwZGl2aXNpb25fcmVzdWx0JTIwJTNBJTIwUmVzdWx0JTVCRG91YmxlJTJDJTIwRXZhbEVycm9yJTVEJTIwJTNEJTIwdHJ5JTNGJTIwJTdCJTBBJTIwJTIwJTIwJTIwRXhwcmVzc2lvbiUzQSUzQURpdihOdW1iZXIoMTAuMCklMkMlMjBOdW1iZXIoMC4wKSkuZXZhbChFbnZpcm9ubWVudCUzQSUzQW5ldygpKSUwQSUyMCUyMCU3RCUwQSUyMCUyMCUwQSUyMCUyMG1hdGNoJTIwZGl2aXNpb25fcmVzdWx0JTIwJTdCJTBBJTIwJTIwJTIwJTIwT2sodiklMjAlM0QlM0UlMjBwcmludGxuKCUyMkRpdmlzaW9uJTIwc3VjY2VlZGVkJTNBJTIwJTVDJTdCdiU3RCUyMiklMEElMjAlMjAlMjAlMjBFcnIoXyklMjAlM0QlM0UlMjBwcmludGxuKCUyMkRpdmlzaW9uJTIwZmFpbGVkJTIwYXMlMjBleHBlY3RlZCUyMiklMEElMjAlMjAlN0QlMEElMjAlMjAlMEElMjAlMjAlMkYlMkYlMjAtLSUyMFN0YXRpc3RpY3MlMjB3aXRoJTIwbmFtZWQlMjBwYXJhbWV0ZXJzJTIwLS0lMEElMjAlMjBwcmludGxuKCUyMiU1Q24tLSUyMFN0YXRpc3RpY3MlMjAtLSUyMiklMEElMjAlMjBsZXQlMjBkYXRhJTIwJTNEJTIwJTVCMi41JTJDJTIwMy41JTJDJTIwNC41JTJDJTIwNS41JTJDJTIwNi41JTVEJTBBJTIwJTIwbGV0JTIwc3RhdHMlMjAlM0QlMjBjcmVhdGVfc3RhdHMoZGF0YSUyQyUyMGluY2x1ZGVfbWVhbiUzRHRydWUpJTBBJTIwJTIwcHJpbnRsbihzdGF0cy50b19zdHJpbmcoKSklMEElMjAlMjAlMEElMjAlMjAlMkYlMkYlMjAtLSUyMFN0cmluZyUyMHZpZXclMjBwYXR0ZXJuJTIwbWF0Y2hpbmclMjAtLSUwQSUyMCUyMHByaW50bG4oJTIyJTVDbi0tJTIwU3RyaW5nJTIwUHJvY2Vzc2luZyUyMC0tJTIyKSUwQSUyMCUyMGxldCUyMHdvcmRzJTIwJTNEJTIwJTVCJTIycmFkYXIlMjIlMkMlMjAlMjJtb29uYml0JTIyJTJDJTIwJTIybGV2ZWwlMjIlMkMlMjAlMjJoZWxsbyUyMiUyQyUyMCUyMiVFNCVCOCU5NiVFNyU5NSU4QyVFNyU5NSU4QyVFNCVCOCU5NiUyMiU1RCUwQSUyMCUyMGZvciUyMHdvcmQlMjBpbiUyMHdvcmRzJTIwJTdCJTBBJTIwJTIwJTIwJTIwaWYlMjBpc19wYWxpbmRyb21lKHdvcmQpJTIwJTdCJTBBJTIwJTIwJTIwJTIwJTIwJTIwcHJpbnRsbiglMjInJTVDJTdCd29yZCU3RCclMjBpcyUyMGElMjBwYWxpbmRyb21lJTIyKSUwQSUyMCUyMCUyMCUyMCU3RCUwQSUyMCUyMCU3RCUwQSUyMCUyMCUwQSUyMCUyMCUyRiUyRiUyMC0tJTIwTWFwJTIwb3BlcmF0aW9ucyUyMC0tJTBBJTIwJTIwcHJpbnRsbiglMjIlNUNuLS0lMjBNYXAlMjBPcGVyYXRpb25zJTIwLS0lMjIpJTBBJTIwJTIwbGV0JTIwbWFwJTIwJTNBJTIwTWFwJTVCU3RyaW5nJTJDJTIwSW50JTVEJTIwJTNEJTIwTWFwJTNBJTNBbmV3KCklMEElMjAlMjBtYXAuc2V0KCUyMm9uZSUyMiUyQyUyMDEpJTBBJTIwJTIwbWFwLnNldCglMjJ0d28lMjIlMkMlMjAyKSUwQSUyMCUyMG1hcC5zZXQoJTIydGhyZWUlMjIlMkMlMjAzKSUwQSUyMCUyMCUwQSUyMCUyMGZvciUyMGtleSUyQyUyMHZhbHVlJTIwaW4lMjBtYXAlMjAlN0IlMEElMjAlMjAlMjAlMjBwcmludGxuKCUyMiU1QyU3QmtleSU3RCUyMCUzRCUzRSUyMCU1QyU3QnZhbHVlJTdEJTIyKSUwQSUyMCUyMCU3RCUwQSUyMCUyMCUwQSUyMCUyMHByaW50bG4oJTIyJTVDbiUzRCUzRCUzRCUyMEVuZCUyMG9mJTIwRGVtbyUyMCUzRCUzRCUzRCUyMiklMEElN0Q=

// ============================================
// MoonBit Comprehensive Feature Demo
// Standard Library Only
// ============================================
// ----------------------------------------
// 1. Error Types (suberror)
// ----------------------------------------
suberror EvalError {
DivByZero
UnknownVariable(String)
}
// ----------------------------------------
// 2. Algebraic Data Types (Enum with payloads)
// ----------------------------------------
enum Expression {
Number(Double)
Variable(String)
Add(Expression, Expression)
Mul(Expression, Expression)
Div(Expression, Expression)
Let(String, Expression, Expression) // let x = e1 in e2
}
// ----------------------------------------
// 3. Structs with mut fields
// ----------------------------------------
struct Environment {
bindings : Map[String, Double]
mut eval_count : Int
}
struct Stats {
sum : Double
mean : Double
samples : Array[Double]
}
// ----------------------------------------
// 4. Traits (Type Classes)
// ----------------------------------------
trait Show {
to_string(Self) -> String
}
// ----------------------------------------
// 5. Methods and Trait Implementations
// ----------------------------------------
// Environment methods
fn Environment::new() -> Environment {
{ bindings: Map::new(), eval_count: 0 }
}
fn Environment::extend(self : Environment, name : String, value : Double) -> Environment {
let new_bindings = self.bindings.copy()
new_bindings.set(name, value)
{ bindings: new_bindings, eval_count: self.eval_count }
}
fn Environment::lookup(self : Environment, name : String) -> Double? {
self.eval_count = self.eval_count + 1
self.bindings.get(name)
}
// Show trait for Expression
impl Show for Expression with to_string(self) {
match self {
Number(n) => n.to_string()
Variable(name) => name
Add(e1, e2) => "(\{e1.to_string()} + \{e2.to_string()})"
Mul(e1, e2) => "(\{e1.to_string()} * \{e2.to_string()})"
Div(e1, e2) => "(\{e1.to_string()} / \{e2.to_string()})"
Let(name, e1, e2) => "(let \{name} = \{e1.to_string()} in \{e2.to_string()})"
}
}
// Show for Stats
impl Show for Stats with to_string(self) {
"Stats(mean: \{self.mean}, sum: \{self.sum}, n: \{self.samples.length()})"
}
// ----------------------------------------
// 6. Pattern Matching & Error Handling
// ----------------------------------------
fn Expression::eval(self : Expression, env : Environment) -> Double raise EvalError {
match self {
Number(n) => n
Variable(name) => {
match env.lookup(name) {
Some(v) => v
None => raise EvalError::UnknownVariable(name)
}
}
Add(e1, e2) => e1.eval(env) + e2.eval(env)
Mul(e1, e2) => e1.eval(env) * e2.eval(env)
Div(e1, e2) => {
let divisor = e2.eval(env)
if divisor == 0.0 {
raise EvalError::DivByZero
}
e1.eval(env) / divisor
}
Let(name, e1, e2) => {
let val = e1.eval(env)
let new_env = env.extend(name, val)
e2.eval(new_env)
}
}
}
// ----------------------------------------
// 7. Generic Functions & Named Parameters
// ----------------------------------------
fn[T] option_or_default(opt : T?, default~ : T) -> T {
match opt {
Some(v) => v
None => default
}
}
fn[T, U, E] result_map(result : Result[T, E], f : (T) -> U) -> Result[U, E] {
match result {
Ok(v) => Ok(f(v))
Err(e) => Err(e)
}
}
// Named parameters with defaults
fn create_stats(
data : Array[Double],
include_mean~ : Bool = true
) -> Stats {
let n = data.length()
let sum = if n == 0 {
0.0
} else {
// Loop expression with accumulator
loop (0, 0.0) {
(i, acc) => {
if i >= n {
break acc // break returns value from loop
}
continue (i + 1, acc + data[i])
}
}
}
let mean = if include_mean && n > 0 {
sum / n.to_double()
} else {
0.0
}
{ sum, mean, samples: data }
}
// ----------------------------------------
// 8. Array Operations & Pattern Matching
// ----------------------------------------
fn analyze_list(lst : Array[Int]) -> String {
match lst {
[] => "Empty list"
[x] => "Single element: \{x}"
[first, second, .. rest] => {
let len = lst.length()
let rest_sum = loop (0, 0) {
(i, acc) => {
if i >= rest.length() {
break acc
}
continue (i + 1, acc + rest[i])
}
}
"First two: \{first}, \{second}; Total length: \{len}; Rest sum: \{rest_sum}"
}
}
}
fn array_sum(arr : Array[Int]) -> Int {
// For loop as expression
for i = 0, acc = 0; i < arr.length(); i = i + 1 {
continue i + 1, acc + arr[i]
} else {
acc
}
}
// ----------------------------------------
// 9. String Processing with Views
// ----------------------------------------
fn is_palindrome(s : String) -> Bool {
let view = s.view()
fn check(v : StringView) -> Bool {
match v {
[] | [_] => true
[first, .. rest, last] => {
if first == last {
check(rest)
} else {
false
}
}
}
}
check(view)
}
// ----------------------------------------
// 10. Main Function - Demonstration
// ----------------------------------------
fn main {
println("=== MoonBit Feature Showcase ===\n")
// -- Variable bindings --
let immutable_val = 42
let mut mutable_val = 0
mutable_val = immutable_val / 2
println("Immutable: \{immutable_val}, Mutable: \{mutable_val}")
// -- Expression evaluation with error handling --
let env = Environment::new()
let expr = Let("x",
Number(10.0),
Add(
Variable("x"),
Mul(Number(2.0), Div(Number(6.0), Number(2.0)))
)
)
println("\nExpression: \{expr.to_string()}")
try {
let result = expr.eval(env)
println("Evaluated to: \{result}")
println("Total variable lookups: \{env.eval_count}")
} catch {
EvalError::DivByZero => println("Error: Division by zero!")
EvalError::UnknownVariable(name) => println("Error: Unknown variable '\{name}'")
}
// -- Loop expressions --
println("\n-- Loop Expressions --")
let factorial_5 = loop (5, 1) {
(n, acc) => {
if n <= 1 {
break acc
}
continue (n - 1, acc * n)
}
}
println("5! = \{factorial_5}")
// -- For loop as expression --
let numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
let sum_even = for i = 0, sum = 0; i < numbers.length(); i = i + 1 {
if numbers[i] % 2 == 0 {
continue i + 1, sum + numbers[i]
} else {
continue i + 1, sum
}
} else {
sum
}
println("Sum of even numbers: \{sum_even}")
// -- While loop with break value --
let mut count = 0
let found = while count < 100 {
count = count + 7
if count > 50 {
break "Found at \{count}"
}
} else {
"Not found"
}
println("While result: \{found}")
// -- Pattern matching on arrays --
println("\n-- Array Patterns --")
let test_list = [1, 2, 3, 4, 5]
println(analyze_list(test_list))
// -- Option and Result types --
println("\n-- Optional Values --")
let maybe_value : Int? = Some(42)
let defaulted = option_or_default(maybe_value, default=0)
println("Option value: \{defaulted}")
let division_result : Result[Double, EvalError] = try? {
Expression::Div(Number(10.0), Number(0.0)).eval(Environment::new())
}
match division_result {
Ok(v) => println("Division succeeded: \{v}")
Err(_) => println("Division failed as expected")
}
// -- Statistics with named parameters --
println("\n-- Statistics --")
let data = [2.5, 3.5, 4.5, 5.5, 6.5]
let stats = create_stats(data, include_mean=true)
println(stats.to_string())
// -- String view pattern matching --
println("\n-- String Processing --")
let words = ["radar", "moonbit", "level", "hello", "世界界世"]
for word in words {
if is_palindrome(word) {
println("'\{word}' is a palindrome")
}
}
// -- Map operations --
println("\n-- Map Operations --")
let map : Map[String, Int] = Map::new()
map.set("one", 1)
map.set("two", 2)
map.set("three", 3)
for key, value in map {
println("\{key} => \{value}")
}
println("\n=== End of Demo ===")
}
@podhmo
Copy link
Author

podhmo commented Jan 30, 2026

Click the link to view conversation with Kimi AI Assistant https://www.kimi.com/share/19c0e5a2-7b02-884d-8000-00003bb5bf42

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment