| Type | Rule | Error prefix |
|---|---|---|
| LanguageId | lowercase letter, then lowercase letters, digits and -; at most 64 characters | frontend.invalid_language |
| ProfileId | same as LanguageId | frontend.invalid_profile |
| BackendId | same as LanguageId | frontend.invalid_backend |
| ProviderId | non-empty, at most 256 characters, no control characters | frontend.invalid_provider |
| FileExtension | starts with ., has more than the dot, no /, \, : or control characters | frontend.invalid_extensions |
| SourcePath | relative, / separators, no empty, . or .. part, no \, : or control characters | frontend.invalid_source_path |
| SourceModuleName | bounded identifier with no space, / or \; keeps the source syntax (Sub.Util) | frontend.invalid_module |
| SourcePackageName | bounded identifier that canonical_path converts; keeps its spelling | frontend.invalid_package |
let elm = "elm" |> @ids.LanguageId::parseimpl Show for FileExtensionimpl Show for LanguageIdimpl Show for ProviderIdimpl Show for SourceModuleNameimpl Show for SourcePackageNameimpl Show for SourcePathfn canonical_path(text : String) -> String raise