Safe Haskell | Safe-Infered |
---|
Feature structures in GenI can be seen as a simple mapping from attributes to values (no fancy recursion).
From an implementation standpoint, we do truck around lists of
AvPair
quite a bit which unfortunately means we don't
guarantee things like uniqueness of attributes. We may phase
this out over time in favour of FeatStruct
- type Flist a = [AvPair a]
- data AvPair a = AvPair {}
- type FeatStruct a = Map Text a
- emptyFeatStruct :: FeatStruct a
- mkFeatStruct :: Flist GeniVal -> FeatStruct GeniVal
- fromFeatStruct :: FeatStruct a -> Flist a
- sortFlist :: Flist a -> Flist a
- unifyFeat :: MonadUnify m => Flist GeniVal -> Flist GeniVal -> m (Flist GeniVal, Subst)
- alignFeat :: Flist GeniVal -> Flist GeniVal -> [(Text, GeniVal, GeniVal)]
- alignFeatH :: Flist GeniVal -> Flist GeniVal -> [(Text, GeniVal, GeniVal)] -> [(Text, GeniVal, GeniVal)]
- crushAvPair :: AvPair SchemaVal -> Maybe (AvPair GeniVal)
- crushFlist :: Flist SchemaVal -> Maybe (Flist GeniVal)
Documentation
A list of attribute-value pairs. It's not a great idea to represent feature structures with this because it allows for duplicates in the attributes. But maybe sometimes you really do mean a list.
data AvPair a
An attribute-value pair, the typical use being
AvPair GeniVal
or if you have something even simpler
AvPair Text
Typeable1 AvPair | |
Pretty SemInput | |
GeniShow SemInput | |
Eq a => Eq (AvPair a) | |
Data a => Data (AvPair a) | |
Ord a => Ord (AvPair a) | |
Binary a => Binary (AvPair a) | |
NFData a => NFData (AvPair a) | |
Pretty (AvPair GeniVal) | |
Pretty (Flist GeniVal) | |
GeniShow gv => GeniShow (AvPair gv) | |
GeniShow gv => GeniShow (Flist gv) | |
DescendGeniVal v => DescendGeniVal (AvPair v) | |
Collectable a => Collectable (AvPair a) | |
DescendGeniVal v => DescendGeniVal ([String], Flist v) |
type FeatStruct a = Map Text a
Experimental, alternative representation of Flist which guarantees uniqueness of keys
emptyFeatStruct :: FeatStruct a
A feature structure with no pairs
mkFeatStruct :: Flist GeniVal -> FeatStruct GeniVal
Convert an Flist
to a proper FeatStruct
Unsafely assumes the keys are unique
fromFeatStruct :: FeatStruct a -> Flist a
Convert an FeatStruct
to a simpler to process Flist
alignFeat :: Flist GeniVal -> Flist GeniVal -> [(Text, GeniVal, GeniVal)]
alignFeat
is a pre-procesing step used to ensure that feature structures
have the same set of keys. If a key is missing in one, we copy it to the
other with an anonymous value.
The two feature structures must be sorted for this to work
alignFeatH :: Flist GeniVal -> Flist GeniVal -> [(Text, GeniVal, GeniVal)] -> [(Text, GeniVal, GeniVal)]
Helper for alignFeat
; ignore