tala-frontend 0.1.0 → 0.2.0
raw patch · 32 files changed
+236/−94 lines, 32 filesdep ~tala-syntax
Dependency ranges changed: tala-syntax
Files
- LICENSE-EXCEPTION +78/−41
- src/Progmasoft/Tala/BuiltinTypes.hs +1/−1
- src/Progmasoft/Tala/Closure/Analysis.hs +1/−1
- src/Progmasoft/Tala/ConstantEvaluation.hs +1/−1
- src/Progmasoft/Tala/Frontend.hs +15/−3
- src/Progmasoft/Tala/IntegerEvaluation.hs +1/−1
- src/Progmasoft/Tala/NumericSemantics.hs +1/−1
- src/Progmasoft/Tala/Resolver/NameResolution.hs +5/−5
- src/Progmasoft/Tala/Resolver/Renamer.hs +7/−4
- src/Progmasoft/Tala/SourceSet.hs +1/−1
- src/Progmasoft/Tala/Template/Application.hs +1/−1
- src/Progmasoft/Tala/Template/Discovery.hs +8/−3
- src/Progmasoft/Tala/Template/Freshen.hs +5/−4
- src/Progmasoft/Tala/Template/Instantiation.hs +3/−2
- src/Progmasoft/Tala/Template/Mangling.hs +1/−1
- src/Progmasoft/Tala/Template/MemberReachability.hs +1/−1
- src/Progmasoft/Tala/Template/Specialization.hs +2/−2
- src/Progmasoft/Tala/Template/Specialization/Verifier.hs +3/−3
- src/Progmasoft/Tala/Template/Verifier.hs +1/−1
- src/Progmasoft/Tala/TemplateValue.hs +1/−1
- src/Progmasoft/Tala/TypeChecker.hs +12/−3
- src/Progmasoft/Tala/TypeChecker/Branching.hs +1/−1
- src/Progmasoft/Tala/TypeChecker/Console.hs +2/−1
- src/Progmasoft/Tala/TypeChecker/Context.hs +1/−1
- src/Progmasoft/Tala/TypeChecker/Enums.hs +1/−1
- src/Progmasoft/Tala/TypeChecker/Format.hs +1/−1
- src/Progmasoft/Tala/TypeChecker/Literals.hs +1/−1
- src/Progmasoft/Tala/TypeChecker/Loops.hs +1/−1
- src/Progmasoft/Tala/TypeChecker/Returns.hs +1/−1
- src/Progmasoft/Tala/TypeChecker/Testing.hs +72/−0
- src/Progmasoft/Tala/TypeClassification.hs +1/−1
- tala-frontend.cabal +5/−4
LICENSE-EXCEPTION view
@@ -1,81 +1,118 @@-Progmasoft Linking Exception, Version 1.1 +Progmasoft Linking Exception, Version 2.0 -This Exception is an additional permission to the Mozilla Public License, version 2.0 ("MPL-2.0"). It is intended to preserve MPL-2.0's file-level obligations for Covered Software while removing doubt about combining that software with independent code. Capitalized terms not defined here have the meanings given in MPL-2.0. +This Exception is an additional permission granted with the Mozilla Public License, version 2.0 ("MPL-2.0"). It keeps MPL-2.0's file-level copyleft for Covered Software and removes doubt about four things: combining Covered Software with other work, what compilers do to code, what programs built with Covered Software tools owe, and the interfaces other work needs in order to use Covered Software. It does not change the text of MPL-2.0. Capitalized terms not defined here have the meanings given in MPL-2.0, and "You" has the meaning given there. 1. Definitions -"Independent Component" means software contained in one or more Source Code Form files that neither contain Covered Software nor are Modifications of Covered Software. A component does not cease to be independent merely because compilation, static or dynamic linking, loading, packaging, or deployment places its Executable Form in the same file, process, address space, archive, image, or distribution as Covered Software. +"Independent Work" means software or other material, in any form, that is neither Covered Software nor a Modification. Sections 3 and 5 say what does not change that. -"Combined Work" means a Larger Work that combines Covered Software with one or more Independent Components by any technical means, including static or dynamic linking, loading, embedding, plugins, extensions, language bindings, an API, ABI, FFI boundary, command-line interface, protocol, inter-process communication mechanism, or file format. +"Tool" means Covered Software that You run to produce material: a compiler, linker, code generator, build system, package manager, formatter, or similar program. -"Output" means material produced by executing Covered Software, including generated source, object code, executable code, intermediate representations, documentation, reports, diagnostics, formatted text, and analysis results. +"Input" means the material You give a Tool to process, other than the Tool's own files. -2. Additional Permission for Combined Works +"Output" means the material a Tool writes when it runs, including source code, intermediate representations, object code, executable code, packages, documentation, reports, diagnostics, formatted text, and analysis results. -Subject to compliance with MPL-2.0 for the Covered Software, each recipient has a worldwide, royalty-free, non-exclusive, irrevocable additional copyright permission to create, reproduce, use, modify, display, perform, make available, and distribute a Combined Work under terms of the recipient's choice, including proprietary or closed-source terms. +"Generated Code" means the part of an Output that a Tool copies, expands, or derives from its own Covered Software in its ordinary operation, rather than from Input. Examples are templates, parser skeletons, entry points, stubs, thunks, tables, metadata, instantiated generics, and project scaffolding. -Those chosen terms may govern Independent Components and other portions of the Combined Work, but must not restrict or alter any recipient's rights in the Covered Software under MPL-2.0 and this Exception. No distributor is required to relicense an Independent Component merely because it forms part of a Combined Work. +"Runtime Material" means Covered Software that (a) the copyright holders of a Tool identify, in the documentation they publish, as that Tool's runtime library or standard library, and (b) is compiled, linked, embedded into, or placed beside an Output because the Output uses it when it runs. A license text or other file installed for documentation only is not Runtime Material. -3. Boundary of Covered Software +"Interface Material" means declarations, type and data layouts, constants, enumerations, macros, function and method signatures, attributes, wire and file formats, and the short inline definitions that an interface needs in order to be used, to the minimum extent necessary to call, implement, extend, bind to, or interoperate with Covered Software. -Linking, loading, calling, communicating with, packaging, installing, or distributing an Independent Component with Covered Software does not, by itself: +2. Larger Works -(a) make the Independent Component Covered Software or a Modification; -(b) subject the Independent Component's Source Code Form to MPL-2.0; or -(c) expand MPL-2.0 beyond files that are Covered Software or Modifications under MPL-2.0. +You may create, reproduce, use, modify, make available, and distribute a Larger Work that combines Covered Software with Independent Work under terms of Your choice, including proprietary terms, provided You comply with MPL-2.0 for the Covered Software as this Exception adjusts it. The combination may be made by any technical means, including static or dynamic linking, loading, embedding, plugins, language bindings, an API, ABI, or FFI boundary, a command-line interface, a protocol, inter-process communication, or a file format. It does not matter whether the works end up in one file, process, address space, archive, image, or deployment. The word "separate" in the definition of Larger Work in MPL-2.0 Section 1.7 refers to Source Code Form. -If Source Code Form from Covered Software is copied into another file, or a new Source Code Form file contains Covered Software, MPL-2.0 determines whether that file is a Modification. Labels, file extensions, build boundaries, code generation, or later separation of files do not avoid that determination. +Your terms may govern the Independent Work and the Larger Work as a whole. They must not limit or alter a recipient's rights in the Source Code Form of the Covered Software. -4. Outputs +Neither MPL-2.0 nor this Exception requires You, for a Larger Work, to provide the Source Code Form of Independent Work, to provide object files or anything else that allows relinking, to allow reverse engineering of Independent Work, or to provide installation information, keys, or credentials. -An Output does not become Covered Software merely because Covered Software produced, transformed, linked, or processed it. The copyright license chosen for input material does not change merely because Covered Software processes that material. +3. What Compilation Does Not Change -If an Output contains copyrightable Source Code Form or other copyrightable material copied or derived from Covered Software, this Exception does not remove MPL-2.0 obligations from that incorporated material. Facts, ideas, interfaces, names, signatures, diagnostics, and other material not protected by copyright are not converted into Covered Software by this Exception. +The following do not make Independent Work into Covered Software or a Modification, and do not subject its Source Code Form to MPL-2.0: -5. Preservation of MPL-2.0 Obligations +(a) calling, linking to, loading, subclassing, implementing, or otherwise using Covered Software through its interfaces; +(b) including, importing, or referring to a Covered Software header, module, or package from a file of Independent Work; and +(c) macro expansion, template or generic instantiation, specialization, inlining, link-time or whole-program optimization, just-in-time compilation, or any comparable compiler transformation that places Covered Software in the compiled form of Independent Work. -This Exception does not remove, replace, waive, or narrow any MPL-2.0 obligation applicable to Covered Software. In particular: +Material placed in a compiled form under (c) is the Executable Form of the Covered Software it came from. Section 4 or Section 5 releases it when it is Generated Code, Runtime Material, or Interface Material. Otherwise MPL-2.0 Section 3.2 applies to it, and Section 7 says how to meet that Section. -(a) Covered Software in Source Code Form and every Modification remain subject to MPL-2.0; -(b) distribution in Executable Form remains subject to MPL-2.0 Section 3.2, including the obligation to inform recipients how to obtain the corresponding Source Code Form when that section applies; -(c) notices protected by MPL-2.0 Section 3.4 must be retained; and -(d) this Exception grants no permission to withhold Source Code Form that MPL-2.0 requires to be made available. +If You copy Covered Software in Source Code Form into a file, other than as Section 4 or Section 5 allows, that file is a Modification. Labels, file extensions, build boundaries, or later separation of files do not change that. -Distribution of a Combined Work under terms of choice is permission for the Combined Work as a whole and its Independent Components. It is not permission to relicense a Covered Software file. +4. Generated Code and Programs Built with Tools -6. Packaging and Deployment +4.1 Output is not Covered Software merely because a Tool produced it. Running a Tool over Input does not change the license of the Input, and material in an Output that comes from Input has the same license as that Input. -Placing Covered Software and an Independent Component in the same archive, package, installer, application bundle, container image, firmware image, distribution medium, hosted deployment, or process does not change their respective copyright licenses. Network interaction or operation as separate processes is not required for independence. +4.2 You may use, modify, and distribute Generated Code, in any form, under terms of Your choice. MPL-2.0 Sections 3.1 through 3.4 do not apply to it. You need not offer its source, keep its notices, or attribute it. -7. Direct Grant to Recipients +4.3 You may distribute Runtime Material in Executable Form as part of, or together with, an Output that uses it, under terms of Your choice. MPL-2.0 Sections 3.1 through 3.4 do not apply to that distribution. The Source Code Form of Runtime Material stays under MPL-2.0, and this Section does not permit distributing Runtime Material on its own. This Section covers Runtime Material You have not changed, and a Modification of it only when You make that Modification available under Section 7. -The additional permission in this Exception is granted directly by the copyright holders applying it to every recipient of the applicable Covered Software. A distributor need not sublicense this Exception. Distribution through one or more intermediaries does not reduce the permission, and termination of an upstream distributor's rights does not terminate rights already received by a compliant downstream recipient. +4.4 Limits. This Section 4 does not apply to: -8. Termination and Reinstatement +(a) Covered Software given to a Tool as Input, unless it is Runtime Material. Compiling, formatting, or transforming Covered Software with a Tool leaves its obligations in place; +(b) material that an unmodified Tool would not write for the same Input and options, unless You make the change that causes it available under Section 7. Changing a Tool so that it copies more of its Covered Software into Output does not widen this Section; or +(c) an Output produced for the purpose of obtaining a Tool's Covered Software rather than for using the Tool. Such material remains subject to MPL-2.0. -This Exception has no separate patent-litigation, field-of-use, combination, or compatibility termination condition. A recipient may exercise it only while entitled to exercise the corresponding MPL-2.0 copyright rights. If those rights terminate under MPL-2.0 Section 5.1, exercise of this Exception for the affected Covered Software is suspended to the same extent and is reinstated when, and to the extent that, the MPL-2.0 rights are reinstated. +4.5 Intermediate representations and every other kind of Output are treated alike. An Output keeps the permissions of this Section after it leaves You. If Your rights in a Tool end, that does not affect Output You have already made or the rights of anyone who received it. -A recipient may elect to use Covered Software under MPL-2.0 without relying on this Exception. +4.6 These permissions lift conditions; they do not end the license. Generated Code and Runtime Material stay licensed to You under MPL-2.0 Section 2, and MPL-2.0 Sections 6 and 7 continue to apply to them. -9. Other Rights +5. Interface Material and Examples -This Exception grants copyright permission only. It grants no trademark, trade dress, service mark, publicity, confidential-information, or patent rights. Patent rights, if any, arise only under MPL-2.0 or a separately applicable patent grant. Nothing in this Exception limits rights arising independently under exhaustion, fair use, fair dealing, implied license, estoppel, or other applicable law. +You may copy Interface Material into Independent Work, and translate it into another language, to the extent needed to use or interoperate with Covered Software. The result is not a Modification, and MPL-2.0 Section 3 does not apply to it, in Source Code Form or in Executable Form. This covers header files, bindings, and declarations in another language. It does not cover the implementation behind an interface. +You may use, copy, and adapt code that the documentation of Covered Software presents as an example or as a starting point for Your own project, under terms of Your choice and without any obligation of MPL-2.0 Section 3. + +6. What This Exception Keeps + +Except where Sections 4 and 5 say otherwise: + +(a) Covered Software in Source Code Form, and every Modification, stay under MPL-2.0 and cannot be relicensed through this Exception; +(b) distributing Covered Software in Executable Form stays subject to MPL-2.0 Section 3.2, as Section 7 explains; +(c) notices protected by MPL-2.0 Section 3.4 stay in place in Source Code Form; and +(d) nothing here allows You to withhold Source Code Form that MPL-2.0 requires You to make available. + +7. Telling Recipients How to Obtain Source + +For Covered Software You have not changed, You satisfy MPL-2.0 Section 3.2(a) by giving recipients of the Executable Form a notice that names the Covered Software and its version and gives an address where the corresponding Source Code Form is publicly available. You may put that notice in documentation, in an about screen, in a notice file, or in a software bill of materials. The copyright holders' own public release of that version is a sufficient source; You need not host a copy, and You are not in breach if that release later stops being available. + +For a Modification, the same notice must give an address where the Source Code Form of the exact version You distributed can be obtained by reasonable means and in a timely manner. An address that follows a branch or otherwise changes over time is not enough. + +8. Contributors and Direct Grant + +Every Contributor who distributes Covered Software that carries an identification under Section 12 grants this Exception for that Contributor's Contributions. + +This Exception is granted directly to every recipient of Covered Software, for the duration of the copyright in it. A distributor need not sublicense it. Distribution through intermediaries does not reduce it, and the end of a distributor's rights does not end rights already received by others. + +You may use Covered Software under MPL-2.0 without relying on this Exception. As an exception to MPL-2.0 Section 3.4, You may remove the identification of this Exception from a file You modify; Your version of that file is then offered by You under MPL-2.0 alone. Earlier copies keep this Exception. + +9. Termination + +This Exception has no termination condition of its own. You may rely on Sections 2, 3, and 5 only while You hold the corresponding rights under MPL-2.0. If those rights end under MPL-2.0 Section 5.1 or 5.2, those permissions end for the affected Covered Software to the same extent, and return if and to the extent those rights are reinstated. This does not reach Independent Work, nor the rights of recipients that MPL-2.0 Section 5.3 preserves, nor Section 4.5. + 10. Relationship to MPL-2.0 -MPL-2.0 and this Exception are read together. If this Exception and MPL-2.0 cannot both be given effect with respect to the creation or distribution of a Combined Work, this Exception controls only to the minimum extent necessary to provide the additional permission stated in Sections 2 through 6. MPL-2.0 controls in every other respect. +MPL-2.0 and this Exception are read together. This Exception is a permission from copyright holders and is not a modified version of MPL-2.0. Where the two cannot both be given effect, this Exception controls only as far as needed to give the permissions in Sections 2 through 5 and 7 through 9, and MPL-2.0 controls in every other respect. This Exception continues to apply if You use Covered Software under a later version of the Mozilla Public License as MPL-2.0 Section 10.2 allows. -Nothing here changes whether Covered Software is "Incompatible With Secondary Licenses" or changes the operation of MPL-2.0 Section 3.3 for a work governed by a Secondary License. +MPL-2.0 Sections 6, 7, 8, and 9 apply to this Exception. It is provided without warranty. -11. Applicability and Version +Nothing here changes whether Covered Software is "Incompatible With Secondary Licenses" or changes the operation of MPL-2.0 Section 3.3 for a work governed by a Secondary License. When You distribute under a Secondary License as that Section allows, the Secondary License governs that distribution. -This Exception applies only to a file that expressly identifies it with this exact SPDX license expression: +11. Other Rights -MPL-2.0 WITH AdditionRef-Progmasoft-Exception-1.1 +This Exception concerns copyright only. It grants no trademark, trade dress, service mark, publicity, or confidential-information rights, and no patent rights beyond those MPL-2.0 or a separately applicable patent grant provides. Nothing here limits rights that arise independently under exhaustion, fair use, fair dealing, implied license, estoppel, or other applicable law. -Reference to Version 1.1 does not incorporate any later version. A copy of this text supplied in a repository or distribution identifies the permission; the per-file expression determines which files receive it. +12. Applicability and Versions -12. Severability +This Exception applies to Covered Software identified with this SPDX license expression, or an expression that contains it: -If any provision of this Exception is held unenforceable, it shall be reformed only to the minimum extent necessary to make it enforceable. If reformation is unavailable, that provision is severed and the remaining provisions continue to the maximum extent permitted by law. +MPL-2.0 WITH AdditionRef-Progmasoft-Exception-2.0 +The identification may be in the file itself, in a companion license file, in a machine-readable file such as REUSE.toml that assigns the expression to that file, or in a notice of the project that names the file or the directory holding it. A compiled form has the identification of the source it was compiled from and does not need to carry it. + +Progmasoft may publish later versions of this Exception. You may use Covered Software under the version that identifies it or under any later version Progmasoft publishes. + +Progmasoft also grants this version for its own Contributions in every release it has made under Version 1.0 or Version 1.1 of this Exception. For those releases You may rely on either version. + +13. Severability + +If any provision of this Exception is held unenforceable, it shall be reformed only to the minimum extent necessary to make it enforceable. If reformation is unavailable, that provision is severed and the remaining provisions continue to the maximum extent permitted by law.
src/Progmasoft/Tala/BuiltinTypes.hs view
@@ -1,5 +1,5 @@ -- SPDX-FileCopyrightText: 2026 Progmasoft <support@progmasoft.com> --- SPDX-License-Identifier: MPL-2.0 WITH AdditionRef-Progmasoft-Exception-1.1 +-- SPDX-License-Identifier: MPL-2.0 WITH AdditionRef-Progmasoft-Exception-2.0 {- | Canonical built-in scalar descriptions shared by type checking and Core. Widths here are language widths, never host-machine widths.
src/Progmasoft/Tala/Closure/Analysis.hs view
@@ -1,5 +1,5 @@ -- SPDX-FileCopyrightText: 2026 Progmasoft <support@progmasoft.com> --- SPDX-License-Identifier: MPL-2.0 WITH AdditionRef-Progmasoft-Exception-1.1 +-- SPDX-License-Identifier: MPL-2.0 WITH AdditionRef-Progmasoft-Exception-2.0 {- | Structural closure facts shared by diagnostics, tooling, and lowering.
src/Progmasoft/Tala/ConstantEvaluation.hs view
@@ -1,5 +1,5 @@ -- SPDX-FileCopyrightText: 2026 Progmasoft <support@progmasoft.com> --- SPDX-License-Identifier: MPL-2.0 WITH AdditionRef-Progmasoft-Exception-1.1 +-- SPDX-License-Identifier: MPL-2.0 WITH AdditionRef-Progmasoft-Exception-2.0 -- | Side-effect-free constant evaluation used for target-range diagnostics. module Progmasoft.Tala.ConstantEvaluation
src/Progmasoft/Tala/Frontend.hs view
@@ -1,5 +1,5 @@ -- SPDX-FileCopyrightText: 2026 Progmasoft <support@progmasoft.com> --- SPDX-License-Identifier: MPL-2.0 WITH AdditionRef-Progmasoft-Exception-1.1 +-- SPDX-License-Identifier: MPL-2.0 WITH AdditionRef-Progmasoft-Exception-2.0 {- | Reusable, target-independent frontend analysis boundaries. @@ -13,12 +13,14 @@ , SyntaxArtifacts (..) , SemanticArtifacts (..) , analyzeSyntax + , analyzeSyntaxWith , analyzeSemantics , analyzeParsedSemantics ) where import Progmasoft.Tala.AST import Progmasoft.Tala.Diagnostic +import Progmasoft.Tala.Directives import Progmasoft.Tala.Lexer import Progmasoft.Tala.NestingLimits import Progmasoft.Tala.Parser @@ -59,9 +61,19 @@ -- | Lex and parse source without invoking semantic analysis or Core lowering. analyzeSyntax :: CompilerInput -> Either [Diagnostic] SyntaxArtifacts -analyzeSyntax input = do +analyzeSyntax = analyzeSyntaxWith hostDirectiveEnvironment + +{- | Lex and parse source for a target: the conditional directives choose +their branches for it. The artifacts keep every token the lexer read, the +directive lines and the branches that were not chosen among them, because a +tool that rewrites the source needs all of it; the parsed tree has the +chosen branches only. +-} +analyzeSyntaxWith :: DirectiveEnvironment -> CompilerInput -> Either [Diagnostic] SyntaxArtifacts +analyzeSyntaxWith environment input = do tokens <- runLexer defaultLexer (LexerInput (compilerSourceFile input) (compilerSourceText input)) - parsed <- runParser defaultParser (ParserInput (compilerSourceFile input) tokens) + chosen <- resolveDirectives environment tokens + parsed <- runParser defaultParser (ParserInput (compilerSourceFile input) chosen) pure (SyntaxArtifacts tokens parsed) -- | Run syntax analysis followed by renaming, resolution, and type checking.
src/Progmasoft/Tala/IntegerEvaluation.hs view
@@ -1,5 +1,5 @@ -- SPDX-FileCopyrightText: 2026 Progmasoft <support@progmasoft.com> --- SPDX-License-Identifier: MPL-2.0 WITH AdditionRef-Progmasoft-Exception-1.1 +-- SPDX-License-Identifier: MPL-2.0 WITH AdditionRef-Progmasoft-Exception-2.0 {- | Bounded, exact integer operations used while evaluating compile-time expressions. These limits protect compiler availability; they do not narrow the
src/Progmasoft/Tala/NumericSemantics.hs view
@@ -1,5 +1,5 @@ -- SPDX-FileCopyrightText: 2026 Progmasoft <support@progmasoft.com> --- SPDX-License-Identifier: MPL-2.0 WITH AdditionRef-Progmasoft-Exception-1.1 +-- SPDX-License-Identifier: MPL-2.0 WITH AdditionRef-Progmasoft-Exception-2.0 {- | Central numeric operator and contextual-literal policy.
src/Progmasoft/Tala/Resolver/NameResolution.hs view
@@ -1,5 +1,5 @@ -- SPDX-FileCopyrightText: 2026 Progmasoft <support@progmasoft.com> --- SPDX-License-Identifier: MPL-2.0 WITH AdditionRef-Progmasoft-Exception-1.1 +-- SPDX-License-Identifier: MPL-2.0 WITH AdditionRef-Progmasoft-Exception-2.0 {- | Convert renamed identifiers into stable symbol identities and diagnose unresolved or reserved names before type checking. @@ -8,7 +8,7 @@ import Progmasoft.Tala.AST import Progmasoft.Tala.Diagnostic -import Progmasoft.Tala.RuntimeCall (builtinConsoleSymbol, builtinSystemSymbol) +import Progmasoft.Tala.RuntimeCall (builtinConsoleSymbol, builtinSystemSymbol, builtinTestSymbol) -- | Pluggable name-resolution pass over a fully renamed syntax tree. newtype NameResolution = NameResolution @@ -53,11 +53,11 @@ EnumDeclaration spanValue sourceName _ underlying cases -> let name = resolveName spanValue sourceName in (EnumDeclaration spanValue (fst name) () underlying cases, snd name) - FunctionDeclaration spanValue sourceName _ returnSyntax sourceParameters sourceBody isStatic access -> + FunctionDeclaration spanValue sourceName _ returnSyntax sourceParameters sourceBody isStatic access fact -> let name = resolveName spanValue sourceName parameters = map resolveParameter sourceParameters (body, bodyProblems) = resolveBlock sourceBody - in ( FunctionDeclaration spanValue (fst name) () returnSyntax (map fst parameters) body isStatic access + in ( FunctionDeclaration spanValue (fst name) () returnSyntax (map fst parameters) body isStatic access fact , snd name ++ concatMap snd parameters ++ bodyProblems ) @@ -275,7 +275,7 @@ resolveName spanValue name | renamedUnique name > 0 = (ResolvedName (SymbolId (renamedUnique name)) (renamedSpelling name), []) -- The names the language declares for every program. - | SymbolId (renamedUnique name) `elem` [builtinSystemSymbol, builtinConsoleSymbol] = + | SymbolId (renamedUnique name) `elem` [builtinSystemSymbol, builtinConsoleSymbol, builtinTestSymbol] = (ResolvedName (SymbolId (renamedUnique name)) (renamedSpelling name), []) | renamedUnique name == 0 = ( ResolvedName (SymbolId 0) (renamedSpelling name)
src/Progmasoft/Tala/Resolver/Renamer.hs view
@@ -1,5 +1,5 @@ -- SPDX-FileCopyrightText: 2026 Progmasoft <support@progmasoft.com> --- SPDX-License-Identifier: MPL-2.0 WITH AdditionRef-Progmasoft-Exception-1.1 +-- SPDX-License-Identifier: MPL-2.0 WITH AdditionRef-Progmasoft-Exception-2.0 {- | Assign stable symbol identities to declarations and references, detecting duplicate declarations while preserving overload-family semantics. @@ -10,7 +10,7 @@ import Data.Map.Strict qualified as Map import Progmasoft.Tala.AST import Progmasoft.Tala.Diagnostic -import Progmasoft.Tala.RuntimeCall (builtinConsoleSymbol, builtinSystemSymbol) +import Progmasoft.Tala.RuntimeCall (builtinConsoleSymbol, builtinSystemSymbol, builtinTestSymbol) -- | Pluggable pass that assigns declaration and local-binding identities. newtype Renamer = Renamer @@ -69,6 +69,9 @@ Map.fromList [ (Identifier "System", RenamedName (Identifier "System") (symbolIdValue builtinSystemSymbol)) , (Identifier "Console", RenamedName (Identifier "Console") (symbolIdValue builtinConsoleSymbol)) + , -- No identifier starts with @$@: only @#expect@ and the runner + -- of a test build use this name. + (Identifier "$Test", RenamedName (Identifier "$Test") (symbolIdValue builtinTestSymbol)) ] {- | The declarations of a namespace under their qualified names: @@ -186,11 +189,11 @@ EnumDeclaration spanValue _ _ underlying cases -> let (rest, final, restProblems) = renameDeclarationsWithBindings globals next remaining assignedRemaining in (EnumDeclaration spanValue assignedName () underlying cases : rest, final, restProblems) - FunctionDeclaration spanValue _ _ returnSyntax sourceParameters sourceBody isStatic access -> + FunctionDeclaration spanValue _ _ returnSyntax sourceParameters sourceBody isStatic access fact -> let name = assignedName (parameters, parameterEnvironment, afterParameters, parameterProblems) = renameParameters globals next sourceParameters (body, afterBody, bodyProblems) = renameBlock parameterEnvironment afterParameters sourceBody - renamed = FunctionDeclaration spanValue name () returnSyntax parameters body isStatic access + renamed = FunctionDeclaration spanValue name () returnSyntax parameters body isStatic access fact (rest, final, restProblems) = renameDeclarationsWithBindings globals afterBody remaining assignedRemaining in (renamed : rest, final, parameterProblems ++ bodyProblems ++ restProblems) renameDeclarationsWithBindings _ next declarations _ =
src/Progmasoft/Tala/SourceSet.hs view
@@ -1,5 +1,5 @@ -- SPDX-FileCopyrightText: 2026 Progmasoft <support@progmasoft.com> --- SPDX-License-Identifier: MPL-2.0 WITH AdditionRef-Progmasoft-Exception-1.1 +-- SPDX-License-Identifier: MPL-2.0 WITH AdditionRef-Progmasoft-Exception-2.0 {- | Filesystem ownership for Tala source compilation.
src/Progmasoft/Tala/Template/Application.hs view
@@ -1,5 +1,5 @@ -- SPDX-FileCopyrightText: 2026 Progmasoft <support@progmasoft.com> --- SPDX-License-Identifier: MPL-2.0 WITH AdditionRef-Progmasoft-Exception-1.1 +-- SPDX-License-Identifier: MPL-2.0 WITH AdditionRef-Progmasoft-Exception-2.0 {- | Typed template declaration catalog and application binding.
src/Progmasoft/Tala/Template/Discovery.hs view
@@ -1,5 +1,5 @@ -- SPDX-FileCopyrightText: 2026 Progmasoft <support@progmasoft.com> --- SPDX-License-Identifier: MPL-2.0 WITH AdditionRef-Progmasoft-Exception-1.1 +-- SPDX-License-Identifier: MPL-2.0 WITH AdditionRef-Progmasoft-Exception-2.0 {- | Typed-AST discovery of concrete template layout demands. @@ -164,7 +164,7 @@ DiscoveryState -> DiscoveryState discoverFunction catalog namespace owner member declaration state = case declaration of - FunctionDeclaration spanValue _ annotation _ parameters body _ _ -> + FunctionDeclaration spanValue _ annotation _ parameters body _ _ _ -> let root = TemplateDiscoveryOrigin owner member [FunctionSignatureSite] spanValue -- Function annotations repeat parameter types in a callable shape. -- Walk the result here and the declared parameters below so each @@ -259,7 +259,12 @@ let origin = root {discoverySites = [ConditionTypeSite index], discoverySpan = spanValue} in discoverBlock catalog namespace origin block (discoverExpression catalog namespace origin condition state) BlockStatement spanValue block -> - discoverBlock catalog namespace (root {discoverySites = [ConditionTypeSite index], discoverySpan = spanValue}) block state + discoverBlock + catalog + namespace + (root {discoverySites = [ConditionTypeSite index], discoverySpan = spanValue}) + block + state ExpressionStatement spanValue expression _ -> discoverExpression catalog
src/Progmasoft/Tala/Template/Freshen.hs view
@@ -1,5 +1,5 @@ -- SPDX-FileCopyrightText: 2026 Progmasoft <support@progmasoft.com> --- SPDX-License-Identifier: MPL-2.0 WITH AdditionRef-Progmasoft-Exception-1.1 +-- SPDX-License-Identifier: MPL-2.0 WITH AdditionRef-Progmasoft-Exception-2.0 {- | Deterministic semantic-name freshening for cloned declarations. @@ -97,7 +97,7 @@ traverse_ reserveDeclarationName members closedMembers <- traverse freshDeclaration members pure (TypeDeclaration spanValue closedName closedAnnotation closedMembers) - FunctionDeclaration spanValue name annotation returnSyntax parameters body isStatic access -> do + FunctionDeclaration spanValue name annotation returnSyntax parameters body isStatic access fact -> do closedName <- freshDefinition name -- Parameters are definitions and must be allocated before the body is -- walked, otherwise references in the body retain the template copy's @@ -115,6 +115,7 @@ closedBody isStatic access + fact ) TemplateTypeDeclaration {} -> -- A nested template introduces a separate substitution/freshening @@ -126,7 +127,7 @@ reserveDeclarationName :: Declaration ResolvedName Type -> Fresh () reserveDeclarationName declaration = case declaration of TypeDeclaration _ name _ _ -> freshDefinition name >> pure () - FunctionDeclaration _ name _ _ _ _ _ _ -> freshDefinition name >> pure () + FunctionDeclaration _ name _ _ _ _ _ _ _ -> freshDefinition name >> pure () TemplateTypeDeclaration {} -> -- Nested templates own a separate specialization environment and must -- not leak definitions into the enclosing concrete type's map. @@ -316,7 +317,7 @@ declarationSymbols declaration = case declaration of TypeDeclaration _ name annotation members -> nameSymbol name : typeSymbols annotation ++ concatMap declarationSymbols members - FunctionDeclaration _ name annotation _ parameters body _ _ -> + FunctionDeclaration _ name annotation _ parameters body _ _ _ -> nameSymbol name : typeSymbols annotation ++ concatMap parameterSymbols parameters
src/Progmasoft/Tala/Template/Instantiation.hs view
@@ -1,5 +1,5 @@ -- SPDX-FileCopyrightText: 2026 Progmasoft <support@progmasoft.com> --- SPDX-License-Identifier: MPL-2.0 WITH AdditionRef-Progmasoft-Exception-1.1 +-- SPDX-License-Identifier: MPL-2.0 WITH AdditionRef-Progmasoft-Exception-2.0 {- | Typed declaration instantiation after template application binding. @@ -61,7 +61,7 @@ Declaration ResolvedName Type -> Either TemplateInstantiationError (Declaration ResolvedName Type) instantiateMember binding declaration = case declaration of - FunctionDeclaration spanValue name annotation returnSyntax parameters body isStatic access -> do + FunctionDeclaration spanValue name annotation returnSyntax parameters body isStatic access fact -> do closedAnnotation <- instantiateType binding annotation closedParameters <- traverse (instantiateParameter binding) parameters closedBody <- instantiateBlock binding body @@ -75,6 +75,7 @@ closedBody isStatic access + fact ) TypeDeclaration spanValue name annotation members -> do closedAnnotation <- instantiateType binding annotation
src/Progmasoft/Tala/Template/Mangling.hs view
@@ -1,5 +1,5 @@ -- SPDX-FileCopyrightText: 2026 Progmasoft <support@progmasoft.com> --- SPDX-License-Identifier: MPL-2.0 WITH AdditionRef-Progmasoft-Exception-1.1 +-- SPDX-License-Identifier: MPL-2.0 WITH AdditionRef-Progmasoft-Exception-2.0 {- | Reversible-by-construction ASCII names for internal template emission.
src/Progmasoft/Tala/Template/MemberReachability.hs view
@@ -1,5 +1,5 @@ -- SPDX-FileCopyrightText: 2026 Progmasoft <support@progmasoft.com> --- SPDX-License-Identifier: MPL-2.0 WITH AdditionRef-Progmasoft-Exception-1.1 +-- SPDX-License-Identifier: MPL-2.0 WITH AdditionRef-Progmasoft-Exception-2.0 {- | Semantic reachability for members of one template declaration.
src/Progmasoft/Tala/Template/Specialization.hs view
@@ -1,5 +1,5 @@ -- SPDX-FileCopyrightText: 2026 Progmasoft <support@progmasoft.com> --- SPDX-License-Identifier: MPL-2.0 WITH AdditionRef-Progmasoft-Exception-1.1 +-- SPDX-License-Identifier: MPL-2.0 WITH AdditionRef-Progmasoft-Exception-2.0 {- | Declaration-level template specialization planning. @@ -513,7 +513,7 @@ declarationTypes :: Declaration ResolvedName Type -> [Type] declarationTypes declaration = case declaration of TypeDeclaration _ _ annotation members -> annotation : concatMap declarationTypes members - FunctionDeclaration _ _ annotation _ parameters body _ _ -> + FunctionDeclaration _ _ annotation _ parameters body _ _ _ -> annotation : concatMap parameterTypes parameters ++ blockTypes body TemplateTypeDeclaration {} -> [] EnumDeclaration {} -> []
src/Progmasoft/Tala/Template/Specialization/Verifier.hs view
@@ -1,5 +1,5 @@ -- SPDX-FileCopyrightText: 2026 Progmasoft <support@progmasoft.com> --- SPDX-License-Identifier: MPL-2.0 WITH AdditionRef-Progmasoft-Exception-1.1 +-- SPDX-License-Identifier: MPL-2.0 WITH AdditionRef-Progmasoft-Exception-2.0 {- | Invariant verification for declaration-level specialization plans. @@ -269,7 +269,7 @@ declarationDefinitionSymbols :: Declaration ResolvedName Type -> [SymbolId] declarationDefinitionSymbols declaration = case declaration of TypeDeclaration _ name _ members -> resolvedSymbol name : concatMap declarationDefinitionSymbols members - FunctionDeclaration _ name _ _ parameters body _ _ -> + FunctionDeclaration _ name _ _ parameters body _ _ _ -> resolvedSymbol name : map (resolvedSymbol . parameterName) parameters ++ blockDefinitionSymbols body @@ -350,7 +350,7 @@ declarationTypes :: Declaration ResolvedName Type -> [Type] declarationTypes declaration = case declaration of TypeDeclaration _ _ annotation members -> annotation : concatMap declarationTypes members - FunctionDeclaration _ _ annotation _ parameters body _ _ -> + FunctionDeclaration _ _ annotation _ parameters body _ _ _ -> annotation : map parameterAnnotation parameters ++ blockTypes body TemplateTypeDeclaration _ _ annotation parameters members -> annotation : map templateParameterAnnotation parameters ++ concatMap declarationTypes members
src/Progmasoft/Tala/Template/Verifier.hs view
@@ -1,5 +1,5 @@ -- SPDX-FileCopyrightText: 2026 Progmasoft <support@progmasoft.com> --- SPDX-License-Identifier: MPL-2.0 WITH AdditionRef-Progmasoft-Exception-1.1 +-- SPDX-License-Identifier: MPL-2.0 WITH AdditionRef-Progmasoft-Exception-2.0 {- | Structural verification for typed template declarations.
src/Progmasoft/Tala/TemplateValue.hs view
@@ -1,5 +1,5 @@ -- SPDX-FileCopyrightText: 2026 Progmasoft <support@progmasoft.com> --- SPDX-License-Identifier: MPL-2.0 WITH AdditionRef-Progmasoft-Exception-1.1 +-- SPDX-License-Identifier: MPL-2.0 WITH AdditionRef-Progmasoft-Exception-2.0 {- | Exact evaluation for compile-time values embedded in type syntax.
src/Progmasoft/Tala/TypeChecker.hs view
@@ -1,5 +1,5 @@ -- SPDX-FileCopyrightText: 2026 Progmasoft <support@progmasoft.com> --- SPDX-License-Identifier: MPL-2.0 WITH AdditionRef-Progmasoft-Exception-1.1 +-- SPDX-License-Identifier: MPL-2.0 WITH AdditionRef-Progmasoft-Exception-2.0 {- | Semantic checker for trees whose references already have stable identities. @@ -21,6 +21,7 @@ import Progmasoft.Tala.TypeChecker.Literals import Progmasoft.Tala.TypeChecker.Loops import Progmasoft.Tala.TypeChecker.Returns +import Progmasoft.Tala.TypeChecker.Testing -- | A resolved-tree checker that produces a typed tree only when checking succeeds. newtype TypeChecker = TypeChecker {checkResolvedAST :: ResolvedAST -> Either [Diagnostic] TypedAST} @@ -136,7 +137,7 @@ signature :: TemplateContext -> Declaration ResolvedName () -> Type signature context declaration = case declaration of - FunctionDeclaration _ _ _ returnSyntax parameters _ _ _ -> + FunctionDeclaration _ _ _ returnSyntax parameters _ _ _ _ -> FunctionType (map (syntaxTypeIn context . parameterTypeSyntax) parameters) ( case returnSyntax of @@ -235,6 +236,7 @@ body (declarationIsStatic declaration) (declarationAccess declaration) + (declarationFact declaration) , signatureProblems ++ problems ++ returnProblems ) checkDeclarationWith context _ declaration@TypeDeclaration {} = checkTopDeclaration (templateCatalog context) declaration @@ -1137,7 +1139,12 @@ expects none of them, or nothing, the reference does not say which is meant. -} methodValue :: - TemplateContext -> Maybe Type -> SourceSpan -> SymbolId -> Identifier -> (Expression ResolvedName Type, Type, [Diagnostic]) + TemplateContext -> + Maybe Type -> + SourceSpan -> + SymbolId -> + Identifier -> + (Expression ResolvedName Type, Type, [Diagnostic]) methodValue context expected spanValue owner member = case chosen of [declaration] -> let valueType = signature context declaration @@ -1194,6 +1201,8 @@ checkTypeQualifiedCall context environment _ callSpan receiver member arguments | consoleReceiver receiver = checkConsoleCall (checkExpressionExpectedWith context environment) callSpan member arguments + | testReceiver receiver = + checkTestCall (checkExpressionExpectedWith context environment) callSpan member arguments checkTypeQualifiedCall context environment expected callSpan receiver member arguments = case typeQualifiedReceiver receiver of Just typeName
src/Progmasoft/Tala/TypeChecker/Branching.hs view
@@ -1,5 +1,5 @@ -- SPDX-FileCopyrightText: 2026 Progmasoft <support@progmasoft.com> --- SPDX-License-Identifier: MPL-2.0 WITH AdditionRef-Progmasoft-Exception-1.1 +-- SPDX-License-Identifier: MPL-2.0 WITH AdditionRef-Progmasoft-Exception-2.0 {- | Typing rules of value blocks, @match@, and @guard@.
src/Progmasoft/Tala/TypeChecker/Console.hs view
@@ -1,5 +1,5 @@ -- SPDX-FileCopyrightText: 2026 Progmasoft <support@progmasoft.com> --- SPDX-License-Identifier: MPL-2.0 WITH AdditionRef-Progmasoft-Exception-1.1 +-- SPDX-License-Identifier: MPL-2.0 WITH AdditionRef-Progmasoft-Exception-2.0 {- | Text and the console in the type checker. @@ -26,6 +26,7 @@ , concatenation , textEquality , runtimeCall + , asText ) where import Progmasoft.Tala.AST
src/Progmasoft/Tala/TypeChecker/Context.hs view
@@ -1,5 +1,5 @@ -- SPDX-FileCopyrightText: 2026 Progmasoft <support@progmasoft.com> --- SPDX-License-Identifier: MPL-2.0 WITH AdditionRef-Progmasoft-Exception-1.1 +-- SPDX-License-Identifier: MPL-2.0 WITH AdditionRef-Progmasoft-Exception-2.0 {- | What the type checker carries from place to place, and how a type written in source becomes a type.
src/Progmasoft/Tala/TypeChecker/Enums.hs view
@@ -1,5 +1,5 @@ -- SPDX-FileCopyrightText: 2026 Progmasoft <support@progmasoft.com> --- SPDX-License-Identifier: MPL-2.0 WITH AdditionRef-Progmasoft-Exception-1.1 +-- SPDX-License-Identifier: MPL-2.0 WITH AdditionRef-Progmasoft-Exception-2.0 {- | Classic enums: their members, their values and their rules.
src/Progmasoft/Tala/TypeChecker/Format.hs view
@@ -1,5 +1,5 @@ -- SPDX-FileCopyrightText: 2026 Progmasoft <support@progmasoft.com> --- SPDX-License-Identifier: MPL-2.0 WITH AdditionRef-Progmasoft-Exception-1.1 +-- SPDX-License-Identifier: MPL-2.0 WITH AdditionRef-Progmasoft-Exception-2.0 {- | The output format grammar of @Console.Printf@ and @Console.Format@.
src/Progmasoft/Tala/TypeChecker/Literals.hs view
@@ -1,5 +1,5 @@ -- SPDX-FileCopyrightText: 2026 Progmasoft <support@progmasoft.com> --- SPDX-License-Identifier: MPL-2.0 WITH AdditionRef-Progmasoft-Exception-1.1 +-- SPDX-License-Identifier: MPL-2.0 WITH AdditionRef-Progmasoft-Exception-2.0 {- | The types of literals and the range of constant expressions.
src/Progmasoft/Tala/TypeChecker/Loops.hs view
@@ -1,5 +1,5 @@ -- SPDX-FileCopyrightText: 2026 Progmasoft <support@progmasoft.com> --- SPDX-License-Identifier: MPL-2.0 WITH AdditionRef-Progmasoft-Exception-1.1 +-- SPDX-License-Identifier: MPL-2.0 WITH AdditionRef-Progmasoft-Exception-2.0 {- | The loops around the place the type checker is at.
src/Progmasoft/Tala/TypeChecker/Returns.hs view
@@ -1,5 +1,5 @@ -- SPDX-FileCopyrightText: 2026 Progmasoft <support@progmasoft.com> --- SPDX-License-Identifier: MPL-2.0 WITH AdditionRef-Progmasoft-Exception-1.1 +-- SPDX-License-Identifier: MPL-2.0 WITH AdditionRef-Progmasoft-Exception-2.0 {- | What the typed tree of a body returns and what leaves its loops.
+ src/Progmasoft/Tala/TypeChecker/Testing.hs view
@@ -0,0 +1,72 @@+-- SPDX-FileCopyrightText: 2026 Progmasoft <support@progmasoft.com> +-- SPDX-License-Identifier: MPL-2.0 WITH AdditionRef-Progmasoft-Exception-2.0 + +{- | The test runtime in the type checker. + +@#expect@ and the runner of a test build call methods of @$Test@, a name +that no source can spell. This module checks those calls and rewrites them +into calls of the runtime, as "Progmasoft.Tala.TypeChecker.Console" does +for the console: + +* @$Test.Fail(header, text, value, ...)@ records a failed expectation. The + report is the header, and below it one line for each operand, its text + and its value: @count is 2@. An operand whose type has no text form is + left out of the report rather than refused, because the expectation + itself is well formed. +* @$Test.End(name)@ closes the test of that name. +* @$Test.Finish()@ writes the totals of the run. +-} +module Progmasoft.Tala.TypeChecker.Testing + ( testReceiver + , checkTestCall + ) where + +import Progmasoft.Tala.AST +import Progmasoft.Tala.Diagnostic +import Progmasoft.Tala.RuntimeCall +import Progmasoft.Tala.TypeChecker.Console (CheckExpression, asText, runtimeCall) + +type Checked = (Expression ResolvedName Type, Type, [Diagnostic]) + +-- | Whether the receiver of a member call is @$Test@. +testReceiver :: Expression ResolvedName () -> Bool +testReceiver receiver = case receiver of + NameExpression _ name _ -> resolvedSymbol name == builtinTestSymbol + _ -> False + +-- | Check a call of a method of @$Test@ and rewrite it into runtime calls. +checkTestCall :: CheckExpression -> SourceSpan -> Identifier -> [Expression ResolvedName ()] -> Checked +checkTestCall check callSpan member arguments = case (identifierText member, arguments) of + ("Fail", LiteralExpression headerSpan (StringLiteral header) () : operands) -> + case operandLines operands of + Right (pieces, problems) -> + let report = foldl join (text headerSpan header) pieces + in (runtimeCall callSpan TestFail [report], voidType, problems) + Left problems -> failed problems + ("End", [LiteralExpression nameSpan (StringLiteral name) ()]) -> + (runtimeCall callSpan TestEnd [text nameSpan name], voidType, []) + ("Finish", []) -> (runtimeCall callSpan TestFinish [], voidType, []) + (name, _) -> failed [problem ("the test runtime has no call " ++ name ++ " of this form")] + where + join whole part = runtimeCall callSpan TextConcat [whole, part] + + -- Each operand as a line of the report: the line terminator, an + -- indent, the operand's text, and its value. + operandLines values = case values of + [] -> Right ([], []) + LiteralExpression textSpan (StringLiteral written) () : value : rest -> do + (later, laterProblems) <- operandLines rest + let (typed, valueType, problems) = check Nothing value + line = case asText (expressionSourceSpan typed) typed valueType of + Right shown -> + [ runtimeCall textSpan TextNewline [] + , text textSpan (" " ++ written ++ " is ") + , shown + ] + Left _ -> [] + Right (line ++ later, problems ++ laterProblems) + _ -> Left [problem "the operands of a failed expectation come in pairs of text and value"] + + text spanValue value = LiteralExpression spanValue (StringLiteral value) stringType + failed problems = (LiteralExpression callSpan UnitLiteral ErrorType, ErrorType, problems) + problem message = Diagnostic TypeCheckerStage Error "TAT0083" (Just callSpan) message
src/Progmasoft/Tala/TypeClassification.hs view
@@ -1,5 +1,5 @@ -- SPDX-FileCopyrightText: 2026 Progmasoft <support@progmasoft.com> --- SPDX-License-Identifier: MPL-2.0 WITH AdditionRef-Progmasoft-Exception-1.1 +-- SPDX-License-Identifier: MPL-2.0 WITH AdditionRef-Progmasoft-Exception-2.0 {- | Recursive value/reference classification for resolved Tala types.
tala-frontend.cabal view
@@ -1,8 +1,8 @@ cabal-version: 3.12 -- SPDX-FileCopyrightText: 2026 Progmasoft <support@progmasoft.com> --- SPDX-License-Identifier: MPL-2.0 WITH AdditionRef-Progmasoft-Exception-1.1 +-- SPDX-License-Identifier: MPL-2.0 WITH AdditionRef-Progmasoft-Exception-2.0 name: tala-frontend -version: 0.1.0 +version: 0.2.0 synopsis: Tala resolution and type-checking frontend description: Name resolution, renaming and type checking of Tala programs, from the @@ -11,7 +11,7 @@ This is an implementation package of the Tala compiler. Its modules may change in any release; tools should depend on tala-tooling instead. . - The source is also offered under the Progmasoft Linking Exception 1.1 + The source is also offered under the Progmasoft Linking Exception 2.0 (LICENSE-EXCEPTION), an additional permission to MPL-2.0 for works that combine this package with independent code. license: MPL-2.0 @@ -51,6 +51,7 @@ Progmasoft.Tala.TypeChecker Progmasoft.Tala.TypeChecker.Branching Progmasoft.Tala.TypeChecker.Console + Progmasoft.Tala.TypeChecker.Testing Progmasoft.Tala.TypeChecker.Context Progmasoft.Tala.TypeChecker.Enums Progmasoft.Tala.TypeChecker.Format @@ -65,7 +66,7 @@ directory >=1.3 && <1.4, filepath >=1.5 && <1.6, text >=2.1 && <2.3, - tala-syntax >=0.1.0 && <0.2 + tala-syntax >=0.2.0 && <0.3 default-language: GHC2024 source-repository head