packages feed

regexp-tries-0.1.0: examples/RegExp.hs

{-# LANGUAGE
        MultiParamTypeClasses,
        TemplateHaskell,
        UndecidableInstances
  #-}

module RegExp where

import Prelude hiding (lookup)

import Data.ListTrie.RegExp

import Data.Bits

import Data.KeyMap (empty, insert, toList)
import qualified Data.KeyMap as KeyMap
import Data.Derive.Trie

$(deriveTrie [''Bool])

toBits :: Int -> [Bool]
toBits n = map (testBit n) [0..7]

fromBits :: [Bool] -> Int
fromBits bs = foldr (\ b n -> let n' = shiftL n 1
                              in  if b then n' + 1 else n') 0 bs

exampleTrie :: ListTrie BoolTrie Int
exampleTrie = foldr (\ n -> insert (toBits n) n) empty [0..255]

re1 = rep (sym True)
re2 = rep (sym False)
re3 = rep (sym True `seq_` sym False)
re4 = rep anySym `seq_` sym False `seq` sym True `seq_` rep anySym
re5 = sym True `seq_` rep anySym