> {-# 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 = (a -> g b) -> g b -> s (Maybe a) -> g b
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 g b
forall a. Ord a => g a
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 = (Maybe a -> g b -> g b) -> g b -> s (Maybe a) -> g b
forall a b. (a -> b -> b) -> b -> s a -> b
forall (c :: * -> *) a b.
Collapsible c =>
(a -> b -> b) -> b -> c a -> b
collapse (g b -> g b -> g b
forall a. Ord a => g a -> g a -> g a
forall (g :: * -> *) a. (Grammar g, Ord a) => g a -> g a -> g a
augmentG (g b -> g b -> g b) -> (Maybe a -> g b) -> Maybe a -> g b -> g b
forall b c a. (b -> c) -> (a -> b) -> a -> c
. g b -> (a -> g b) -> Maybe a -> g b
forall b a. b -> (a -> b) -> Maybe a -> b
maybe g b
forall a. Ord a => g a
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 = g b -> g b -> Bool
forall a. Ord a => g a -> g a -> Bool
forall (g :: * -> *) a. (Grammar g, Ord a) => g a -> g a -> Bool
isSubGOf g b
g (g b -> Bool) -> (a -> g b) -> a -> Bool
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