1-- SPDX-FileCopyrightText: 2025 Sören Tempel <soeren+git@soeren-tempel.net>2--3-- SPDX-License-Identifier: GPL-3.0-only45module Language.QBE6 ( Program,7 Definition (..),8 globalFuncs,9 Language.QBE.parse,10 )11where1213import Data.Maybe (mapMaybe)14import Language.QBE.Parser (dataDef, funcDef, typeDef)15import Language.QBE.Types (DataDef, FuncDef, TypeDef)16import Text.ParserCombinators.Parsec17 ( ParseError,18 Parser,19 SourceName,20 choice,21 eof,22 many,23 parse,24 )2526data Definition27 = DefData DataDef28 | DefType TypeDef29 | DefFunc FuncDef30 deriving (Eq, Show)3132parseDef :: Parser Definition33parseDef =34 choice35 [ DefType <$> typeDef,36 DefFunc <$> funcDef,37 DefData <$> dataDef38 ]3940type Program = [Definition]4142globalFuncs :: Program -> [FuncDef]43globalFuncs = mapMaybe globalFuncs'44 where45 globalFuncs' :: Definition -> Maybe FuncDef46 globalFuncs' (DefFunc f) = Just f47 globalFuncs' _ = Nothing4849parse :: SourceName -> String -> Either ParseError Program50parse = Text.ParserCombinators.Parsec.parse (many parseDef <* eof)