diff -r 560263485988 -r 2dec32c7313f src/Tools/Haskell/Haskell.thy --- a/src/Tools/Haskell/Haskell.thy Sun Nov 04 15:28:51 2018 +0100 +++ b/src/Tools/Haskell/Haskell.thy Sun Nov 04 17:19:56 2018 +0100 @@ -36,9 +36,12 @@ -} module Isabelle.Library - ((|>), (|->), (#>), (#->), fold, fold_rev, single, quote, trim_line) + ((|>), (|->), (#>), (#->), the_default, fold, fold_rev, single, quote, trim_line) where +import Data.Maybe + + {- functions -} (|>) :: a -> (a -> b) -> b @@ -54,6 +57,13 @@ (f #-> g) x = x |> f |-> g +{- options -} + +the_default :: a -> Maybe a -> a +the_default x Nothing = x +the_default _ (Just y) = y + + {- lists -} fold :: (a -> b -> b) -> [a] -> b -> b @@ -196,12 +206,44 @@ Quasi-abstract markup elements. -} -module Isabelle.Markup (T, empty, is_empty, Output, no_output) +module Isabelle.Markup ( + T, empty, is_empty, properties, + + nameN, name, xnameN, xname, kindN, + + lineN, end_lineN, offsetN, end_offsetN, fileN, idN, positionN, position, + + wordsN, words, no_wordsN, no_words, + + tfreeN, tfree, tvarN, tvar, freeN, free, skolemN, skolem, boundN, bound, varN, var, + numeralN, numeral, literalN, literal, delimiterN, delimiter, inner_stringN, inner_string, + inner_cartoucheN, inner_cartouche, inner_commentN, inner_comment, + token_rangeN, token_range, + sortingN, sorting, typingN, typing, class_parameterN, class_parameter, + + antiquotedN, antiquoted, antiquoteN, antiquote, + + paragraphN, paragraph, text_foldN, text_fold, + + keyword1N, keyword1, keyword2N, keyword2, keyword3N, keyword3, quasi_keywordN, quasi_keyword, + improperN, improper, operatorN, operator, stringN, string, alt_stringN, alt_string, + verbatimN, verbatim, cartoucheN, cartouche, commentN, comment, + + writelnN, writeln, stateN, state, informationN, information, tracingN, tracing, + warningN, warning, legacyN, legacy, errorN, error, reportN, report, no_reportN, no_report, + + intensifyN, intensify, + Output, no_output) where +import Prelude hiding (words, error) + +import Isabelle.Library import qualified Isabelle.Properties as Properties +{- basic markup -} + type T = (String, Properties.T) empty :: T @@ -211,6 +253,199 @@ is_empty ("", _) = True is_empty _ = False +properties :: Properties.T -> T -> T +properties more_props (elem, props) = + (elem, fold_rev Properties.put more_props props) + +markup_elem name = (name, (name, []) :: T) + + +{- misc properties -} + +nameN :: String +nameN = \Markup.nameN\ + +name :: String -> T -> T +name a = properties [(nameN, a)] + +xnameN :: String +xnameN = \Markup.xnameN\ + +xname :: String -> T -> T +xname a = properties [(xnameN, a)] + +kindN :: String +kindN = \Markup.kindN\ + + +{- position -} + +lineN, end_lineN :: String +lineN = \Markup.lineN\ +end_lineN = \Markup.end_lineN\ + +offsetN, end_offsetN :: String +offsetN = \Markup.offsetN\ +end_offsetN = \Markup.end_offsetN\ + +fileN, idN :: String +fileN = \Markup.fileN\ +idN = \Markup.idN\ + +positionN :: String; position :: T +(positionN, position) = markup_elem \Markup.positionN\ + + +{- text properties -} + +wordsN :: String; words :: T +(wordsN, words) = markup_elem \Markup.wordsN\ + +no_wordsN :: String; no_words :: T +(no_wordsN, no_words) = markup_elem \Markup.no_wordsN\ + + +{- inner syntax -} + +tfreeN :: String; tfree :: T +(tfreeN, tfree) = markup_elem \Markup.tfreeN\ + +tvarN :: String; tvar :: T +(tvarN, tvar) = markup_elem \Markup.tvarN\ + +freeN :: String; free :: T +(freeN, free) = markup_elem \Markup.freeN\ + +skolemN :: String; skolem :: T +(skolemN, skolem) = markup_elem \Markup.skolemN\ + +boundN :: String; bound :: T +(boundN, bound) = markup_elem \Markup.boundN\ + +varN :: String; var :: T +(varN, var) = markup_elem \Markup.varN\ + +numeralN :: String; numeral :: T +(numeralN, numeral) = markup_elem \Markup.numeralN\ + +literalN :: String; literal :: T +(literalN, literal) = markup_elem \Markup.literalN\ + +delimiterN :: String; delimiter :: T +(delimiterN, delimiter) = markup_elem \Markup.delimiterN\ + +inner_stringN :: String; inner_string :: T +(inner_stringN, inner_string) = markup_elem \Markup.inner_stringN\ + +inner_cartoucheN :: String; inner_cartouche :: T +(inner_cartoucheN, inner_cartouche) = markup_elem \Markup.inner_cartoucheN\ + +inner_commentN :: String; inner_comment :: T +(inner_commentN, inner_comment) = markup_elem \Markup.inner_commentN\ + + +token_rangeN :: String; token_range :: T +(token_rangeN, token_range) = markup_elem \Markup.token_rangeN\ + + +sortingN :: String; sorting :: T +(sortingN, sorting) = markup_elem \Markup.sortingN\ + +typingN :: String; typing :: T +(typingN, typing) = markup_elem \Markup.typingN\ + +class_parameterN :: String; class_parameter :: T +(class_parameterN, class_parameter) = markup_elem \Markup.class_parameterN\ + + +{- antiquotations -} + +antiquotedN :: String; antiquoted :: T +(antiquotedN, antiquoted) = markup_elem \Markup.antiquotedN\ + +antiquoteN :: String; antiquote :: T +(antiquoteN, antiquote) = markup_elem \Markup.antiquoteN\ + + +{- text structure -} + +paragraphN :: String; paragraph :: T +(paragraphN, paragraph) = markup_elem \Markup.paragraphN\ + +text_foldN :: String; text_fold :: T +(text_foldN, text_fold) = markup_elem \Markup.text_foldN\ + + +{- outer syntax -} + +keyword1N :: String; keyword1 :: T +(keyword1N, keyword1) = markup_elem \Markup.keyword1N\ + +keyword2N :: String; keyword2 :: T +(keyword2N, keyword2) = markup_elem \Markup.keyword2N\ + +keyword3N :: String; keyword3 :: T +(keyword3N, keyword3) = markup_elem \Markup.keyword3N\ + +quasi_keywordN :: String; quasi_keyword :: T +(quasi_keywordN, quasi_keyword) = markup_elem \Markup.quasi_keywordN\ + +improperN :: String; improper :: T +(improperN, improper) = markup_elem \Markup.improperN\ + +operatorN :: String; operator :: T +(operatorN, operator) = markup_elem \Markup.operatorN\ + +stringN :: String; string :: T +(stringN, string) = markup_elem \Markup.stringN\ + +alt_stringN :: String; alt_string :: T +(alt_stringN, alt_string) = markup_elem \Markup.alt_stringN\ + +verbatimN :: String; verbatim :: T +(verbatimN, verbatim) = markup_elem \Markup.verbatimN\ + +cartoucheN :: String; cartouche :: T +(cartoucheN, cartouche) = markup_elem \Markup.cartoucheN\ + +commentN :: String; comment :: T +(commentN, comment) = markup_elem \Markup.commentN\ + + +{- messages -} + +writelnN :: String; writeln :: T +(writelnN, writeln) = markup_elem \Markup.writelnN\ + +stateN :: String; state :: T +(stateN, state) = markup_elem \Markup.stateN\ + +informationN :: String; information :: T +(informationN, information) = markup_elem \Markup.informationN\ + +tracingN :: String; tracing :: T +(tracingN, tracing) = markup_elem \Markup.tracingN\ + +warningN :: String; warning :: T +(warningN, warning) = markup_elem \Markup.warningN\ + +legacyN :: String; legacy :: T +(legacyN, legacy) = markup_elem \Markup.legacyN\ + +errorN :: String; error :: T +(errorN, error) = markup_elem \Markup.errorN\ + +reportN :: String; report :: T +(reportN, report) = markup_elem \Markup.reportN\ + +no_reportN :: String; no_report :: T +(no_reportN, no_report) = markup_elem \Markup.no_reportN\ + +intensifyN :: String; intensify :: T +(intensifyN, intensify) = markup_elem \Markup.intensifyN\ + + +{- output -} type Output = (String, String) @@ -246,9 +481,9 @@ {- wrapped elements -} -xml_elemN = "xml_elem"; -xml_nameN = "xml_name"; -xml_bodyN = "xml_body"; +xml_elemN = \XML.xml_elemN\ +xml_nameN = \XML.xml_nameN\ +xml_bodyN = \XML.xml_bodyN\ wrap_elem (((a, atts), body1), body2) = Elem (xml_elemN, (xml_nameN, a) : atts) (Elem (xml_bodyN, []) body1 : body2)