-- Hoogle documentation, generated by Haddock -- See Hoogle, http://www.haskell.org/hoogle/ -- | Encoding character data -- @package Encode @version 1.3.7 -- | This module provides the Parsek library developed by Koen -- Claessen in his functional pearl article Parallel Parsing -- Processes, Journal of Functional Programming, 14(6), 741757, -- Cambridge University Press, 2004: -- -- -- http://www.cse.chalmers.se/edu/course/afp/Papers/parser-claessen.pdf -- -- Copyright (C) 2003 Koen Claessen -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by -- the Free Software Foundation; either version 2 of the License, or (at -- your option) any later version. -- -- This program is distributed in the hope that it will be useful, but -- WITHOUT ANY WARRANTY; without even the implied warranty of -- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -- General Public License for more details. -- -- You should have received a copy of the GNU General Public License -- along with this program; if not, write to the Free Software -- Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -- 02110-1301 USA. -- -- PureFP.Parsers.Stream module Parsek data Parser s a type Expect = [String] type Unexpect = [String] satisfy :: Show s => (s -> Bool) -> Parser s s look :: Parser s [s] succeeds :: Parser s a -> Parser s (Maybe a) string :: (Eq s, Show s) => [s] -> Parser s [s] char :: (Show t, Eq t) => t -> Parser t t noneOf :: (Show a, Eq a) => [a] -> Parser a a oneOf :: (Show a, Eq a) => [a] -> Parser a a spaces :: Parser Char () space :: Parser Char Char newline :: Parser Char Char tab :: Parser Char Char upper :: Parser Char Char lower :: Parser Char Char alphaNum :: Parser Char Char letter :: Parser Char Char digit :: Parser Char Char hexDigit :: Parser Char Char octDigit :: Parser Char Char anyChar :: Parser s s anySymbol :: Parser s s munch :: (s -> Bool) -> Parser s [s] munch1 :: Show s => (s -> Bool) -> Parser s [s] label :: Parser s a -> String -> Parser s a (>) :: Parser s a -> String -> Parser s a pzero :: Parser s a (<|>) :: Parser s a -> Parser s a -> Parser s a (<<|>) :: Parser s a -> Parser s a -> Parser s a try :: Parser s a -> Parser s a choice :: [Parser s a] -> Parser s a option :: a -> Parser s a -> Parser s a optional :: Parser s a -> Parser s () between :: Parser s open -> Parser s close -> Parser s a -> Parser s a count :: Int -> Parser s a -> Parser s [a] chainl1 :: Parser s a -> Parser s (a -> a -> a) -> Parser s a chainl :: Parser s a -> Parser s (a -> a -> a) -> a -> Parser s a chainr1 :: Parser s a -> Parser s (a -> a -> a) -> Parser s a chainr :: Parser s a -> Parser s (a -> a -> a) -> a -> Parser s a skipMany1 :: Parser s a -> Parser s () skipMany :: Parser s a -> Parser s () many1 :: Parser s a -> Parser s [a] many :: Parser s a -> Parser s [a] sepBy1 :: Parser s a -> Parser s sep -> Parser s [a] sepBy :: Parser s a -> Parser s sep -> Parser s [a] type ParseMethod s a e r = P s a -> [s] -> ParseResult e r type ParseResult e r = Either (e, Expect, Unexpect) r parseFromFile :: Parser Char a -> ParseMethod Char a e r -> FilePath -> IO (ParseResult e r) parse :: Parser s a -> ParseMethod s a e r -> [s] -> ParseResult e r shortestResult :: ParseMethod s a (Maybe s) a longestResult :: ParseMethod s a (Maybe s) a longestResults :: ParseMethod s a (Maybe s) [a] allResults :: ParseMethod s a (Maybe s) [a] allResultsStaged :: ParseMethod s a (Maybe s) [[a]] completeResults :: ParseMethod s a (Maybe s) [a] shortestResultWithLeftover :: ParseMethod s a (Maybe s) (a, [s]) longestResultWithLeftover :: ParseMethod s a (Maybe s) (a, [s]) longestResultsWithLeftover :: ParseMethod s a (Maybe s) ([a], Maybe [s]) allResultsWithLeftover :: ParseMethod s a (Maybe s) [(a, [s])] completeResultsWithLine :: ParseMethod Char a Int [a] instance MonadPlus (Parser s) instance Monad (Parser s) instance Functor (Parser s) -- | Chapter 1 and Appendix A of /Pure Functional Parsing an advanced -- tutorial/ by Peter Ljunglöf -- -- http://www.ling.gu.se/~peb/pubs/p02-lic-thesis.pdf module PureFP.OrdSet class OrdSet m where xs <++> ys = fst (plusMinus xs ys) xs <\\> ys = snd (plusMinus xs ys) plusMinus xs ys = (xs <++> ys, xs <\\> ys) union [] = emptySet union [xs] = xs union xyss = union xss <++> union yss where (xss, yss) = split xyss split (x : y : xyss) = let (xs, ys) = split xyss in (x : xs, y : ys) split xs = (xs, []) makeSet xs = union (map unitSet xs) limit more start = limit' (start, start) where limit' (old, new) | isEmpty new' = old | otherwise = limit' (plusMinus new' old) where new' = union (map more (elems new)) emptySet :: (OrdSet m, Ord a) => m a unitSet :: (OrdSet m, Ord a) => a -> m a isEmpty :: (OrdSet m, Ord a) => m a -> Bool elemSet :: (OrdSet m, Ord a) => a -> m a -> Bool (<++>) :: (OrdSet m, Ord a) => m a -> m a -> m a (<\\>) :: (OrdSet m, Ord a) => m a -> m a -> m a plusMinus :: (OrdSet m, Ord a) => m a -> m a -> (m a, m a) union :: (OrdSet m, Ord a) => [m a] -> m a makeSet :: (OrdSet m, Ord a) => [a] -> m a elems :: (OrdSet m, Ord a) => m a -> [a] ordSet :: (OrdSet m, Ord a) => [a] -> m a limit :: (OrdSet m, Ord a) => (a -> m a) -> m a -> m a data Set a instance OrdSet Set instance Show a => Show (Set a) instance Ord a => Ord (Set a) instance Eq a => Eq (Set a) -- | Chapters 3 and 4 of Pure Functional Parsing an advanced -- tutorial by Peter Ljunglöf -- -- http://www.ling.gu.se/~peb/pubs/p02-lic-thesis.pdf -- -- http://www.ling.gu.se/~peb/software/functional-parsing/ module PureFP.Parsers.Parser class Parser m s | m -> s where parseFull p inp = [a | ([], a) <- parse p inp] parse :: Parser m s => m a -> [s] -> [([s], a)] parseFull :: Parser m s => m a -> [s] -> [a] class Monoid m where anyof = foldr (<+>) zero zero :: Monoid m => m a (<+>) :: Monoid m => m a -> m a -> m a anyof :: Monoid m => [m a] -> m a class (Monad m, Functor m) => Sequence m where p <*> q = p >>= \ f -> fmap f q p *> q = fmap (\ x y -> y) p <*> q (<*>) :: Sequence m => m (a -> b) -> m a -> m b (*>) :: Sequence m => m a -> m b -> m b class Eq s => Symbol m s | m -> s where sym s = sat (s ==) skip = sat (\ x -> True) sym :: Symbol m s => s -> m s sat :: Symbol m s => (s -> Bool) -> m s skip :: Symbol m s => m s class Ord s => InputSymbol s minSym, maxSym :: InputSymbol s => s symbols :: InputSymbol s => [s] class Eq s => SymbolCont m s | m -> s satCont :: SymbolCont m s => (s -> Bool) -> (s -> m a) -> m a class Lookahead m s | m -> s lookahead :: Lookahead m s => ([s] -> m a) -> m a success :: Monad m => m () many0 :: (Monoid m, Sequence m) => m a -> m () syms0 :: (Sequence m, Symbol m s) => [s] -> m () (<:>) :: Sequence m => m a -> m [a] -> m [a] many :: (Monoid m, Sequence m) => m a -> m [a] syms :: (Sequence m, Symbol m s) => [s] -> m [s] instance InputSymbol Int instance InputSymbol Char -- | Chapters 3 and 4 of Pure Functional Parsing an advanced -- tutorial by Peter Ljunglöf -- -- http://www.ling.gu.se/~peb/pubs/p02-lic-thesis.pdf -- -- http://www.ling.gu.se/~peb/software/functional-parsing/ module PureFP.Parsers.Standard newtype Standard s a Std :: ([s] -> [([s], a)]) -> Standard s a instance Lookahead (Standard s) s instance Parser (Standard s) s instance Eq s => SymbolCont (Standard s) s instance Eq s => Symbol (Standard s) s instance Sequence (Standard s) instance Functor (Standard s) instance Monad (Standard s) instance Monoid (Standard s) instance MonadState [s] (Standard s) -- | Chapters 3 and 4 of Pure Functional Parsing an advanced -- tutorial by Peter Ljunglöf -- -- http://www.ling.gu.se/~peb/pubs/p02-lic-thesis.pdf -- -- http://www.ling.gu.se/~peb/software/functional-parsing/ -- -- Parsek module PureFP.Parsers.Stream data Stream s a instance Parser (Stream s) s instance Eq s => SymbolCont (Stream s) s instance Eq s => Symbol (Stream s) s instance Sequence (Stream s) instance Functor (Stream s) instance Monad (Stream s) instance Monoid (Stream s) -- | Chapter 1 and Appendix A of /Pure Functional Parsing an advanced -- tutorial/ by Peter Ljunglöf -- -- http://www.ling.gu.se/~peb/pubs/p02-lic-thesis.pdf module PureFP.OrdMap class OrdMap m where lookupWith z m s = case m ? s of { Just a -> a Nothing -> z } unionMapWith join = union where union [] = emptyMap union [xs] = xs union xyss = mergeWith join (union xss) (union yss) where (xss, yss) = split xyss split (x : y : xyss) = let (xs, ys) = split xyss in (x : xs, y : ys) split xs = (xs, []) emptyMap :: (OrdMap m, Ord s) => m s a (|->) :: (OrdMap m, Ord s) => s -> a -> m s a isEmptyMap :: (OrdMap m, Ord s) => m s a -> Bool (?) :: (OrdMap m, Ord s) => m s a -> s -> Maybe a lookupWith :: (OrdMap m, Ord s) => a -> m s a -> s -> a mergeWith :: (OrdMap m, Ord s) => (a -> a -> a) -> m s a -> m s a -> m s a unionMapWith :: (OrdMap m, Ord s) => (a -> a -> a) -> [m s a] -> m s a assocs :: (OrdMap m, Ord s) => m s a -> [(s, a)] ordMap :: (OrdMap m, Ord s) => [(s, a)] -> m s a mapMap :: (OrdMap m, Ord s) => (a -> b) -> m s a -> m s b data Map s a makeMapWith :: (Ord s, OrdMap m) => (a -> a -> a) -> [(s, a)] -> m s a mapMapWithKey :: (s -> t -> a) -> Map s t -> Map s a instance OrdMap Map instance (Show s, Show a) => Show (Map s a) instance (Eq s, Eq a) => Eq (Map s a) -- | Encode.Extend module Encode.ExPlus class ExtEnv e initEnv :: ExtEnv e => e i type Extend e s = StateT [e s] (Standard s) inspectIList :: Extend e s [s] returnIList :: [s] -> Extend e s [s] inspectEList :: Extend e s [e s] returnEList :: [e s] -> Extend e s [e s] inspectEnv :: Extend e s (e s) resetEnv :: (a -> e s -> e s) -> a -> Extend e s (e s) oneof :: (Ord s, Symbol m s) => [Map s a] -> m s lower :: Ord s => [s] -> [s] -> Extend e s [s] upper :: (OrdMap m, Ord s) => [s] -> [m s [c]] -> Extend e d ([c] -> [c]) upperWith :: (s -> m -> e d -> [[c]]) -> [s] -> m -> Extend e d ([c] -> [c]) oneof' :: (Ord [s], Symbol m [s], Eq s, Monad m) => s -> [Map [s] a] -> m [s] (<|>) :: Extend e s a -> Extend e s a -> Extend e s a again :: Extend e s a -> Extend e s [a] lookupList :: (OrdMap m, Ord s) => s -> [m s a] -> [a] instance ExtEnv e => Parser (Extend e s) s instance Eq s => Symbol (Extend e s) s instance Sequence (Extend e s) instance Monoid (Extend e s) -- | Chapters 3 and 4 of Pure Functional Parsing an advanced -- tutorial by Peter Ljunglöf -- -- http://www.ling.gu.se/~peb/pubs/p02-lic-thesis.pdf -- -- http://www.ling.gu.se/~peb/software/functional-parsing/ module PureFP.Parsers.Trie data Trie s a instance Ord s => Parser (Trie s) s instance InputSymbol s => Symbol (Trie s) s instance Ord s => Sequence (Trie s) instance Ord s => Functor (Trie s) instance Ord s => Monad (Trie s) instance Ord s => Monoid (Trie s) -- | Chapters 3 and 4 of Pure Functional Parsing an advanced -- tutorial by Peter Ljunglöf -- -- http://www.ling.gu.se/~peb/pubs/p02-lic-thesis.pdf -- -- http://www.ling.gu.se/~peb/software/functional-parsing/ module PureFP.Parsers.AmbTrie data AmbTrie s a (:&:) :: [a] -> Map s (AmbTrie s a) -> AmbTrie s a instance Ord s => Parser (AmbTrie s) s instance InputSymbol s => Symbol (AmbTrie s) s instance Ord s => Sequence (AmbTrie s) instance Ord s => Functor (AmbTrie s) instance Ord s => Monad (AmbTrie s) instance Ord s => Monoid (AmbTrie s) -- | Chapters 3 and 4 of Pure Functional Parsing an advanced -- tutorial by Peter Ljunglöf -- -- http://www.ling.gu.se/~peb/pubs/p02-lic-thesis.pdf -- -- http://www.ling.gu.se/~peb/software/functional-parsing/ module PureFP.Parsers.ExTrie data ExTrie s a instance Ord s => Parser (ExTrie s) s instance InputSymbol s => Symbol (ExTrie s) s instance Ord s => Sequence (ExTrie s) instance Ord s => Functor (ExTrie s) instance Ord s => Monad (ExTrie s) instance Ord s => Monoid (ExTrie s) -- | Chapters 3 and 4 of Pure Functional Parsing an advanced -- tutorial by Peter Ljunglöf -- -- http://www.ling.gu.se/~peb/pubs/p02-lic-thesis.pdf -- -- http://www.ling.gu.se/~peb/software/functional-parsing/ module PureFP.Parsers.AmbExTrie data AmbExTrie s a (:&:) :: [a] -> Map s (AmbExTrie s a) -> AmbExTrie s a FMap :: (b -> a) -> (AmbExTrie s b) -> AmbExTrie s a unfold :: Ord s => (a -> b) -> AmbExTrie s a -> AmbExTrie s b instance Ord s => Parser (AmbExTrie s) s instance InputSymbol s => Symbol (AmbExTrie s) s instance Ord s => Sequence (AmbExTrie s) instance Ord s => Functor (AmbExTrie s) instance Ord s => Monad (AmbExTrie s) instance Ord s => Monoid (AmbExTrie s) -- | Chapters 3 and 4 of Pure Functional Parsing an advanced -- tutorial by Peter Ljunglöf -- -- http://www.ling.gu.se/~peb/pubs/p02-lic-thesis.pdf -- -- http://www.ling.gu.se/~peb/software/functional-parsing/ module PureFP.Parsers.PairTrie data PairTrie m s a data ParserTrie s a instance Ord s => Parser (ParserTrie s) s instance Ord s => Functor (ParserTrie s) instance Ord s => Monoid (ParserTrie s) instance (Ord s, Parser m s) => Parser (PairTrie m s) s instance (InputSymbol s, Monoid m, Symbol m s, Lookahead m s) => Symbol (PairTrie m s) s instance (Ord s, Monoid m, Sequence m, Lookahead m s) => Sequence (PairTrie m s) instance (Ord s, Functor m) => Functor (PairTrie m s) instance (Ord s, Monad m) => Monad (PairTrie m s) instance (Ord s, Monoid m, Lookahead m s) => Monoid (PairTrie m s) -- | Chapters 3 and 4 of Pure Functional Parsing an advanced -- tutorial by Peter Ljunglöf -- -- http://www.ling.gu.se/~peb/pubs/p02-lic-thesis.pdf -- -- http://www.ling.gu.se/~peb/software/functional-parsing/ -- -- With this limited distribution, you can create only some of the -- parsers described in the thesis. These include in particular: -- --
-- module MyEncModule (MyEncType (..)) where -- -- import Encode -- -- data MyEncType = MyEncName | MyEncAlias deriving (Enum, Show) -- -- instance Encoding MyEncType where -- -- encode enc data = show data -- your choices ... -- -- decode enc data = map (toEnum . fromEnum) data ---- -- Encode.Unicode.UTF8 is one concrete implementation that -- realizes and illustrates this template. -- Encode.Arabic.Buckwalter implements symmetric recoding using -- finite maps, and Encode.Arabic.ArabTeX makes use of monadic -- parsing and the PureFP library. class Encoding e where encode _ = map (toEnum . fromEnum) decode _ = map (toEnum . fromEnum) encode :: Encoding e => e -> [UPoint] -> [Char] decode :: Encoding e => e -> [Char] -> [UPoint] -- | The datatype introduced for the internal representation of Unicode -- code points is currently defined as newtype UPoint = UPoint -- CSpace. The shift to code points UPoint from characters -- Char is intentional, as Unicode support in Haskell is not yet -- fully implemented, and code points are, anyway, different entities. -- Since the UPoint type is an instance of the Enum -- class, the type's constructor and destructor functions are available -- as toEnum and fromEnum, respectively. -- -- The UPoint datatype should be the transfer point on the way -- from one encoding into another. It should not be the terminal stop, -- though. The encode method should be used systematically, and -- not show, even if it might temporarily produce somehow -- appealing results. data UPoint -- | The CSpace type denotes the code space, and it is a synonym to -- Word. type CSpace = Word instance Eq UPoint instance Ord UPoint instance Enum UPoint instance Show UPoint -- | Encode::Arabic::ArabTeX in Perl: -- http://search.cpan.org/dist/Encode-Arabic/lib/Encode/Arabic/ArabTeX.pm -- -- Encode.Extend Encode.Mapper module Encode.Arabic.ArabTeX data ArabTeX ArabTeX :: ArabTeX Lagally :: ArabTeX TeX :: ArabTeX tokens :: String -> [String] events :: String -> [[String]] instance Enum ArabTeX instance Show ArabTeX instance Eq Mode instance Ord Mode instance ExtEnv Env instance Encoding ArabTeX -- | Encode::Arabic::ArabTeX::ZDMG in Perl: -- http://search.cpan.org/dist/Encode-Arabic/lib/Encode/Arabic/ArabTeX/ZDMG.pm -- -- Encode.Extend Encode.Mapper module Encode.Arabic.ArabTeX.ZDMG data ZDMG ZDMG :: ZDMG ArabTeX_ZDMG :: ZDMG instance Enum ZDMG instance Show ZDMG instance Eq Mode instance Ord Mode instance ExtEnv Env instance Encoding ZDMG -- | Tim Buckwalter's notation is a one-to-one transliteration of the -- graphemes of the Arabic script using lower ASCII characters only. This -- system is very popular in Natural Language Processing, however, there -- are limits to its applicability due to numerous non-alphabetic -- characters involved. -- -- The XML-friendly variant of the notation replaces codes >, -- &, < with O, W, I, -- respectively. In this implementation, the decode function -- considers both of these conventions and converts from them, while the -- encode function produces the XML-friendly notation only. -- -- Encode::Arabic::Buckwalter in Perl: -- http://search.cpan.org/dist/Encode-Arabic/lib/Encode/Arabic/Buckwalter.pm module Encode.Arabic.Buckwalter data Buckwalter Buckwalter :: Buckwalter Tim :: Buckwalter instance Enum Buckwalter instance Show Buckwalter instance Encoding Buckwalter -- | Dil Parkinson's notation is a one-to-one transliteration of the -- graphemes of the Arabic script using lower ASCII characters only. -- -- Encode::Arabic::Parkinson in Perl: -- http://search.cpan.org/dist/Encode-Arabic/lib/Encode/Arabic/Parkinson.pm module Encode.Arabic.Parkinson data Parkinson Parkinson :: Parkinson Dil :: Parkinson instance Enum Parkinson instance Show Parkinson instance Encoding Parkinson -- | Habash-Soudi-Buckwalter notation is a one-to-one transliteration of -- the graphemes of the Arabic script into various symbols of Unicode -- defined in -- http://scholar.google.com/scholar?q=habash+soudi+buckwalter. -- -- Encode::Arabic::Habash in Perl: -- http://search.cpan.org/dist/Encode-Arabic/lib/Encode/Arabic/Habash.pm module Encode.Arabic.Habash data Habash Habash :: Habash Soudi :: Habash HSB :: Habash instance Enum Habash instance Show Habash instance Encoding Habash -- | Encode::Byte in Perl: -- http://search.cpan.org/dist/Encode/Byte/Byte.pm -- -- http://search.cpan.org/dist/Encode/lib/Encode/Supported.pod -- -- http://129.69.218.213/arabtex/doc/arabdoc.pdf module Encode.Arabic.Byte data WinArabic WinArabic :: WinArabic CP1256 :: WinArabic Windows_1256 :: WinArabic data ISOArabic ISOArabic :: ISOArabic ISO_8859_6 :: ISOArabic data MacArabic MacArabic :: MacArabic data MacFarsi MacFarsi :: MacFarsi data DOSArabic DOSArabic :: DOSArabic CP864 :: DOSArabic data DOSFarsi DOSFarsi :: DOSFarsi CP1006 :: DOSFarsi data ASMO449 ASMO449 :: ASMO449 data ISIRI3342 ISIRI3342 :: ISIRI3342 instance Enum WinArabic instance Show WinArabic instance Enum ISOArabic instance Show ISOArabic instance Enum MacArabic instance Show MacArabic instance Enum MacFarsi instance Show MacFarsi instance Enum DOSArabic instance Show DOSArabic instance Enum DOSFarsi instance Show DOSFarsi instance Enum ASMO449 instance Show ASMO449 instance Enum ISIRI3342 instance Show ISIRI3342 instance Encoding ISIRI3342 instance Encoding ASMO449 instance Encoding DOSFarsi instance Encoding DOSArabic instance Encoding MacFarsi instance Encoding MacArabic instance Encoding ISOArabic instance Encoding WinArabic -- | Modified version of John Meacham's -- http://repetae.net/repos/jhc/UTF8.hs module Encode.Unicode.UTF8 data UTF8 UTF8 :: UTF8 UTF :: UTF8 instance Enum UTF8 instance Show UTF8 instance Encoding UTF8 -- | The Haskell analogy to the Encode::Unicode module in Perl: -- http://search.cpan.org/dist/Encode/ -- -- Encode.Unicode.UTF8 module Encode.Unicode data Unicode Unicode :: Unicode UCS :: Unicode instance Enum Unicode instance Show Unicode instance Encoding Unicode -- | The Haskell version of Encode::Arabic originally written in -- Perl: http://search.cpan.org/dist/Encode-Arabic/ -- -- Encode.Arabic.ArabTeX Encode.Arabic.ArabTeX.ZDMG -- Encode.Arabic.Buckwalter Encode.Arabic.Parkinson -- Encode.Arabic.Habash Encode.Arabic.Byte module Encode.Arabic