> {-# OPTIONS_HADDOCK show-extensions #-}
>
> module LTK.Learn.StringExt ( Grammar(..)
> , learn
> , augmentSE
> , isRecognizedBy
> ) where
> import Control.DeepSeq (NFData)
> import LTK.Containers
> import LTK.FSA (FSA)
>
>
>
>
>
>
> learn :: (Grammar g, Ord b, Collapsible s) =>
> (a -> g b) -> s (Maybe a) -> g b
> learn :: forall (g :: * -> *) b (s :: * -> *) a.
(Grammar g, Ord b, Collapsible s) =>
(a -> g b) -> s (Maybe a) -> g b
learn a -> g b
f = forall (g :: * -> *) b (s :: * -> *) a.
(Grammar g, Ord b, Collapsible s) =>
(a -> g b) -> g b -> s (Maybe a) -> g b
augmentSE a -> g b
f forall (g :: * -> *) a. (Grammar g, Ord a) => g a
emptyG
>
> augmentSE :: (Grammar g, Ord b, Collapsible s) =>
> (a -> g b) -> g b -> s (Maybe a) -> g b
> augmentSE :: forall (g :: * -> *) b (s :: * -> *) a.
(Grammar g, Ord b, Collapsible s) =>
(a -> g b) -> g b -> s (Maybe a) -> g b
augmentSE a -> g b
f = forall (c :: * -> *) a b.
Collapsible c =>
(a -> b -> b) -> b -> c a -> b
collapse (forall (g :: * -> *) a. (Grammar g, Ord a) => g a -> g a -> g a
augmentG forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall b a. b -> (a -> b) -> Maybe a -> b
maybe forall (g :: * -> *) a. (Grammar g, Ord a) => g a
emptyG a -> g b
f)
>
> isRecognizedBy :: (Grammar g, Ord b) => (a -> g b) -> g b -> a -> Bool
> isRecognizedBy :: forall (g :: * -> *) b a.
(Grammar g, Ord b) =>
(a -> g b) -> g b -> a -> Bool
isRecognizedBy a -> g b
f g b
g = forall (g :: * -> *) a. (Grammar g, Ord a) => g a -> g a -> Bool
isSubGOf g b
g forall b c a. (b -> c) -> (a -> b) -> a -> c
. a -> g b
f
>
>
>
> class Grammar g
> where genFSA :: (NFData a, Ord a) => g a -> FSA Integer a
> augmentG :: Ord a => g a -> g a -> g a
> isSubGOf :: Ord a => g a -> g a -> Bool
> emptyG :: Ord a => g a