src/Tools/Haskell/Term_XML/Encode.hs
author wenzelm
Mon, 05 Nov 2018 17:06:50 +0100
changeset 69240 16ca270090b6
child 69280 e1d01b351724
permissions -rw-r--r--
more Haskell operations; tuned;
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/Encode.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.
16ca270090b6 more Haskell operations;
wenzelm
parents:
diff changeset
     8
-}
16ca270090b6 more Haskell operations;
wenzelm
parents:
diff changeset
     9
16ca270090b6 more Haskell operations;
wenzelm
parents:
diff changeset
    10
{-# LANGUAGE LambdaCase #-}
16ca270090b6 more Haskell operations;
wenzelm
parents:
diff changeset
    11
16ca270090b6 more Haskell operations;
wenzelm
parents:
diff changeset
    12
module Isabelle.Term_XML.Encode (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.Encode
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
   [\case { Type (a, b) -> Just ([a], list typ b); _ -> Nothing },
16ca270090b6 more Haskell operations;
wenzelm
parents:
diff changeset
    28
    \case { TFree (a, b) -> Just ([a], sort b); _ -> Nothing },
16ca270090b6 more Haskell operations;
wenzelm
parents:
diff changeset
    29
    \case { TVar ((a, b), c) -> Just ([a, int_atom b], sort c); _ -> Nothing }]
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
   [\case { Const (a, b) -> Just ([a], typ b); _ -> Nothing },
16ca270090b6 more Haskell operations;
wenzelm
parents:
diff changeset
    35
    \case { Free (a, b) -> Just ([a], typ b); _ -> Nothing },
16ca270090b6 more Haskell operations;
wenzelm
parents:
diff changeset
    36
    \case { Var ((a, b), c) -> Just ([a, int_atom b], typ c); _ -> Nothing },
16ca270090b6 more Haskell operations;
wenzelm
parents:
diff changeset
    37
    \case { Bound a -> Just ([int_atom a], []); _ -> Nothing },
16ca270090b6 more Haskell operations;
wenzelm
parents:
diff changeset
    38
    \case { Abs (a, b, c) -> Just ([a], pair typ term (b, c)); _ -> Nothing },
16ca270090b6 more Haskell operations;
wenzelm
parents:
diff changeset
    39
    \case { App a -> Just ([], pair term term a); _ -> Nothing }]