src/Tools/Haskell/Term_XML/Decode.hs
author wenzelm
Sat, 10 Nov 2018 17:12:09 +0100
changeset 69280 e1d01b351724
parent 69240 16ca270090b6
permissions -rw-r--r--
more formal references;
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
69240
16ca270090b6 more Haskell operations;
wenzelm
parents:
diff changeset
     1
{- generated by Isabelle -}
16ca270090b6 more Haskell operations;
wenzelm
parents:
diff changeset
     2
16ca270090b6 more Haskell operations;
wenzelm
parents:
diff changeset
     3
{-  Title:      Tools/Haskell/Term_XML/Decode.hs
16ca270090b6 more Haskell operations;
wenzelm
parents:
diff changeset
     4
    Author:     Makarius
16ca270090b6 more Haskell operations;
wenzelm
parents:
diff changeset
     5
    LICENSE:    BSD 3-clause (Isabelle)
16ca270090b6 more Haskell operations;
wenzelm
parents:
diff changeset
     6
16ca270090b6 more Haskell operations;
wenzelm
parents:
diff changeset
     7
XML data representation of lambda terms.
69280
e1d01b351724 more formal references;
wenzelm
parents: 69240
diff changeset
     8
e1d01b351724 more formal references;
wenzelm
parents: 69240
diff changeset
     9
See also "$ISABELLE_HOME/src/Pure/term_xml.ML".
69240
16ca270090b6 more Haskell operations;
wenzelm
parents:
diff changeset
    10
-}
16ca270090b6 more Haskell operations;
wenzelm
parents:
diff changeset
    11
16ca270090b6 more Haskell operations;
wenzelm
parents:
diff changeset
    12
module Isabelle.Term_XML.Decode (sort, typ, term)
16ca270090b6 more Haskell operations;
wenzelm
parents:
diff changeset
    13
where
16ca270090b6 more Haskell operations;
wenzelm
parents:
diff changeset
    14
16ca270090b6 more Haskell operations;
wenzelm
parents:
diff changeset
    15
import Isabelle.Library
16ca270090b6 more Haskell operations;
wenzelm
parents:
diff changeset
    16
import qualified Isabelle.XML as XML
16ca270090b6 more Haskell operations;
wenzelm
parents:
diff changeset
    17
import Isabelle.XML.Decode
16ca270090b6 more Haskell operations;
wenzelm
parents:
diff changeset
    18
import Isabelle.Term
16ca270090b6 more Haskell operations;
wenzelm
parents:
diff changeset
    19
16ca270090b6 more Haskell operations;
wenzelm
parents:
diff changeset
    20
16ca270090b6 more Haskell operations;
wenzelm
parents:
diff changeset
    21
sort :: T Sort
16ca270090b6 more Haskell operations;
wenzelm
parents:
diff changeset
    22
sort = list string
16ca270090b6 more Haskell operations;
wenzelm
parents:
diff changeset
    23
16ca270090b6 more Haskell operations;
wenzelm
parents:
diff changeset
    24
typ :: T Typ
16ca270090b6 more Haskell operations;
wenzelm
parents:
diff changeset
    25
typ ty =
16ca270090b6 more Haskell operations;
wenzelm
parents:
diff changeset
    26
  ty |> variant
16ca270090b6 more Haskell operations;
wenzelm
parents:
diff changeset
    27
  [\([a], b) -> Type (a, list typ b),
16ca270090b6 more Haskell operations;
wenzelm
parents:
diff changeset
    28
   \([a], b) -> TFree (a, sort b),
16ca270090b6 more Haskell operations;
wenzelm
parents:
diff changeset
    29
   \([a, b], c) -> TVar ((a, int_atom b), sort c)]
16ca270090b6 more Haskell operations;
wenzelm
parents:
diff changeset
    30
16ca270090b6 more Haskell operations;
wenzelm
parents:
diff changeset
    31
term :: T Term
16ca270090b6 more Haskell operations;
wenzelm
parents:
diff changeset
    32
term t =
16ca270090b6 more Haskell operations;
wenzelm
parents:
diff changeset
    33
  t |> variant
16ca270090b6 more Haskell operations;
wenzelm
parents:
diff changeset
    34
   [\([a], b) -> Const (a, typ b),
16ca270090b6 more Haskell operations;
wenzelm
parents:
diff changeset
    35
    \([a], b) -> Free (a, typ b),
16ca270090b6 more Haskell operations;
wenzelm
parents:
diff changeset
    36
    \([a, b], c) -> Var ((a, int_atom b), typ c),
16ca270090b6 more Haskell operations;
wenzelm
parents:
diff changeset
    37
    \([a], []) -> Bound (int_atom a),
16ca270090b6 more Haskell operations;
wenzelm
parents:
diff changeset
    38
    \([a], b) -> let (c, d) = pair typ term b in Abs (a, c, d),
16ca270090b6 more Haskell operations;
wenzelm
parents:
diff changeset
    39
    \([], a) -> App (pair term term a)]