Difference between revisions of "Functions not data structures"

From HaskellWiki
Jump to navigation Jump to search
(Migrating from old wiki)
m (Fixing link)
Line 21: Line 21:
 
</haskell>
 
</haskell>
   
[[Run time compilation]] uses functions not data structures to implement an interpreter.
+
[[Runtime compilation]] uses functions not data structures to implement an interpretation layer.
   
 
[[Category:Idioms]]
 
[[Category:Idioms]]

Revision as of 06:17, 20 July 2010

Sometimes the best way to represent data is using a function.

Church encoding can be used to represent any algebraic data type using only functions.

Another example is the following, not very efficient, implementation of a FiniteMap:

type FiniteMap key elt = key -> Maybe elt

emptyFM :: FiniteMap key elt
emptyFM = \k' -> Nothing

addToFM :: (Eq key) => FiniteMap key elt -> key -> elt -> FiniteMap key elt
addToFM m k v = \k' -> if (k == k') then Just v else m k'

delFromFM :: (Eq k) => FiniteMap key elt -> key -> FiniteMap key elt
delFromFM  m k = \k' -> if (k == k') then Nothing else m k'

lookupFM :: (Eq k) => FiniteMap key elt -> key -> Maybe elt
lookupFM m k = m k

Runtime compilation uses functions not data structures to implement an interpretation layer.