[new module Fragemnts created and implemented
martin.hofmann@uni-bamberg.de**20081114120738] addfile ./src/Data/Fragments.hs
hunk ./src/Data/Fragments.hs 1
-
+
+module Data.Fragments (
+
+       
+    RuleFrag, name, frag, covr, opos, isOpen
+    
+    )where
+
+import Data.Rules (Rule) 
+import Prelude hiding (map)
+import Data.Util
+import Data.Set (Set)
+import qualified Data.Set as S (fromList, toList, fold, map, insert, delete, union)
+import Terms (Exp, Pat, size, Size, Position, Name)
+
+--------------------------------------------------------------------------------
+-- Datatype RuleFragment
+--------------------------------------------------------------------------------
+
+
+-- 
+-- Encapsulating all information of an open/unfinished Rule
+data RuleFrag = RF
+    { name  :: Name
+    , frag  :: Rule
+    , covr  :: [Int]
+    , opos  :: [Position]     
+    }
+    deriving(Eq, Ord, Show)
+    
+isOpen :: RuleFrag -> Bool
+isOpen = null.opos
+
+asFrag :: Name -> Rule -> RuleFrag
+asFrag n r = rulefrag n r [] []
+
+rulefrag :: Name -> Rule -> [Int] -> [Position] -> RuleFrag
+rulefrag n r c o = RF n r c o    
+
+
+--------------------------------------------------------------------------------
+-- Datatype RuleFragments
+--------------------------------------------------------------------------------
+
+newtype RuleFrags = RFS { unRFS :: Set RuleFrag }
+    deriving(Eq, Ord)
+
+instance Show RuleFrags where
+    show (RFS rfs) = showAsSet (S.toList rfs) $ ""
+    
+    
+rulefrags = fromList
+
+
+fold :: (RuleFrag -> a -> a) -> a -> RuleFrags -> a
+fold f i rs = S.fold f i (unRFS rs)
+
+map :: (RuleFrag -> RuleFrag) -> RuleFrags -> RuleFrags
+map f rs  = RFS $ (S.map f) (unRFS rs)
+
+
+union :: RuleFrags -> RuleFrags -> RuleFrags
+union (RFS rs1) (RFS rs2) = RFS $ S.union rs1 rs2
+
+insert :: RuleFrag -> RuleFrags -> RuleFrags
+insert r rs = RFS $ (S.insert r) $ unRFS rs
+
+delete :: RuleFrag -> RuleFrags -> RuleFrags
+delete r rs = RFS $ (S.delete r) $ unRFS rs
+
+
+replace :: RuleFrag ->  -- ^replace old rule 
+           RuleFrag ->  -- ^by new rule
+           RuleFrags -> -- ^in some rules
+           RuleFrags
+replace r1 r2 = (insert r2).(delete r1)
+
+fromList :: [RuleFrag] -> RuleFrags
+fromList rs  = RFS $ S.fromList rs
+
+fromSet :: Set RuleFrag -> RuleFrags
+fromSet rs = RFS rs
+
+toList = S.toList.unRFS
+toSet = unRFS