CookBook/Recipes/StoringData.thy
author Christian Urban <urbanc@in.tum.de>
Thu, 08 Jan 2009 22:46:06 +0000
changeset 63 83cea5dc6bac
parent 61 64c9540f2f84
child 68 e7519207c2b7
permissions -rw-r--r--
tuned

theory StoringData
imports "../Base"
begin

section {* Storing Data\label{recipe:storingdata} *} 


text {*
  {\bf Problem:} 
  Your tool needs to keep complex data.\smallskip

  {\bf Solution:} This can be achieved using a generic data slot.\smallskip

  Every generic data slot may keep data of any kind which is stored in the
  context.

  *}

ML {* local

structure Data = GenericDataFun
(
  type T = int Symtab.table
  val empty = Symtab.empty
  val extend = I
  fun merge _ = Symtab.merge (K true)
)

in

val lookup = Symtab.lookup o Data.get

fun update k v = Data.map (Symtab.update (k, v))

end *}

setup {* Context.theory_map (update "foo" 1) *}

ML {* lookup (Context.Proof @{context}) "foo" *}

text {*
  alternatives: TheoryDataFun, ProofDataFun
  Code: Pure/context.ML *}

end