atto-lisp 0.2 → 0.2.1
raw patch · 2 files changed
+41/−8 lines, 2 filesPVP: major bump suggested
API removals or changes: PVP suggests a major version bump
API changes (from Hackage documentation)
- Data.AttoLisp: instance (FromLisp a, FromLisp b) => FromLisp (Either a b)
- Data.AttoLisp: instance (FromLisp a, FromLisp b) => FromLisp (a, b)
- Data.AttoLisp: instance (FromLisp a, FromLisp b, FromLisp c) => FromLisp (a, b, c)
- Data.AttoLisp: instance (FromLisp a, ParseList b c) => ParseList (a -> b) c
- Data.AttoLisp: instance (Ord a, FromLisp a, FromLisp b) => FromLisp (Map a b)
- Data.AttoLisp: instance (ToLisp a, ToLisp b) => ToLisp (Either a b)
- Data.AttoLisp: instance (ToLisp a, ToLisp b) => ToLisp (Map a b)
- Data.AttoLisp: instance (ToLisp a, ToLisp b) => ToLisp (a, b)
- Data.AttoLisp: instance (ToLisp a, ToLisp b, ToLisp c) => ToLisp (a, b, c)
- Data.AttoLisp: instance Alternative Parser
- Data.AttoLisp: instance Alternative Result
- Data.AttoLisp: instance Applicative Parser
- Data.AttoLisp: instance Applicative Result
- Data.AttoLisp: instance Data Lisp
- Data.AttoLisp: instance Eq Lisp
- Data.AttoLisp: instance Eq a => Eq (Result a)
- Data.AttoLisp: instance FromLisp ()
- Data.AttoLisp: instance FromLisp (Ratio Integer)
- Data.AttoLisp: instance FromLisp Bool
- Data.AttoLisp: instance FromLisp Char
- Data.AttoLisp: instance FromLisp Double
- Data.AttoLisp: instance FromLisp Float
- Data.AttoLisp: instance FromLisp Int
- Data.AttoLisp: instance FromLisp Int16
- Data.AttoLisp: instance FromLisp Int32
- Data.AttoLisp: instance FromLisp Int64
- Data.AttoLisp: instance FromLisp Int8
- Data.AttoLisp: instance FromLisp Integer
- Data.AttoLisp: instance FromLisp Lisp
- Data.AttoLisp: instance FromLisp Number
- Data.AttoLisp: instance FromLisp Text
- Data.AttoLisp: instance FromLisp Word
- Data.AttoLisp: instance FromLisp Word16
- Data.AttoLisp: instance FromLisp Word32
- Data.AttoLisp: instance FromLisp Word64
- Data.AttoLisp: instance FromLisp Word8
- Data.AttoLisp: instance FromLisp [Char]
- Data.AttoLisp: instance FromLisp a => FromLisp (Maybe a)
- Data.AttoLisp: instance FromLisp a => FromLisp [a]
- Data.AttoLisp: instance Functor Parser
- Data.AttoLisp: instance Functor Result
- Data.AttoLisp: instance IsString Lisp
- Data.AttoLisp: instance Monad Parser
- Data.AttoLisp: instance Monad Result
- Data.AttoLisp: instance MonadPlus Parser
- Data.AttoLisp: instance MonadPlus Result
- Data.AttoLisp: instance Monoid (Parser a)
- Data.AttoLisp: instance Monoid (Result a)
- Data.AttoLisp: instance NFData Lisp
- Data.AttoLisp: instance NFData a => NFData (Result a)
- Data.AttoLisp: instance Ord Lisp
- Data.AttoLisp: instance ParseList a a
- Data.AttoLisp: instance Show Lisp
- Data.AttoLisp: instance Show a => Show (Result a)
- Data.AttoLisp: instance ToLisp ()
- Data.AttoLisp: instance ToLisp (Ratio Integer)
- Data.AttoLisp: instance ToLisp Bool
- Data.AttoLisp: instance ToLisp Char
- Data.AttoLisp: instance ToLisp Double
- Data.AttoLisp: instance ToLisp Float
- Data.AttoLisp: instance ToLisp Int
- Data.AttoLisp: instance ToLisp Int16
- Data.AttoLisp: instance ToLisp Int32
- Data.AttoLisp: instance ToLisp Int64
- Data.AttoLisp: instance ToLisp Int8
- Data.AttoLisp: instance ToLisp Integer
- Data.AttoLisp: instance ToLisp Lisp
- Data.AttoLisp: instance ToLisp Number
- Data.AttoLisp: instance ToLisp Text
- Data.AttoLisp: instance ToLisp Word
- Data.AttoLisp: instance ToLisp Word16
- Data.AttoLisp: instance ToLisp Word32
- Data.AttoLisp: instance ToLisp Word64
- Data.AttoLisp: instance ToLisp Word8
- Data.AttoLisp: instance ToLisp [Char]
- Data.AttoLisp: instance ToLisp a => ToLisp (Maybe a)
- Data.AttoLisp: instance ToLisp a => ToLisp [a]
- Data.AttoLisp: instance Typeable Lisp
- Data.AttoLisp: instance Typeable1 Result
+ Data.AttoLisp: instance [overlap ok] (FromLisp a, FromLisp b) => FromLisp (Either a b)
+ Data.AttoLisp: instance [overlap ok] (FromLisp a, FromLisp b) => FromLisp (a, b)
+ Data.AttoLisp: instance [overlap ok] (FromLisp a, FromLisp b, FromLisp c) => FromLisp (a, b, c)
+ Data.AttoLisp: instance [overlap ok] (FromLisp a, IsFunction b f, ParseList' f b c, ParseList b c) => ParseList' HTrue (a -> b) c
+ Data.AttoLisp: instance [overlap ok] (IsFunction a f, ParseList' f a b) => ParseList a b
+ Data.AttoLisp: instance [overlap ok] (Ord a, FromLisp a, FromLisp b) => FromLisp (Map a b)
+ Data.AttoLisp: instance [overlap ok] (ToLisp a, ToLisp b) => ToLisp (Either a b)
+ Data.AttoLisp: instance [overlap ok] (ToLisp a, ToLisp b) => ToLisp (Map a b)
+ Data.AttoLisp: instance [overlap ok] (ToLisp a, ToLisp b) => ToLisp (a, b)
+ Data.AttoLisp: instance [overlap ok] (ToLisp a, ToLisp b, ToLisp c) => ToLisp (a, b, c)
+ Data.AttoLisp: instance [overlap ok] Alternative Parser
+ Data.AttoLisp: instance [overlap ok] Alternative Result
+ Data.AttoLisp: instance [overlap ok] Applicative Parser
+ Data.AttoLisp: instance [overlap ok] Applicative Result
+ Data.AttoLisp: instance [overlap ok] Data Lisp
+ Data.AttoLisp: instance [overlap ok] Eq Lisp
+ Data.AttoLisp: instance [overlap ok] Eq a => Eq (Result a)
+ Data.AttoLisp: instance [overlap ok] FromLisp ()
+ Data.AttoLisp: instance [overlap ok] FromLisp (Ratio Integer)
+ Data.AttoLisp: instance [overlap ok] FromLisp Bool
+ Data.AttoLisp: instance [overlap ok] FromLisp Char
+ Data.AttoLisp: instance [overlap ok] FromLisp Double
+ Data.AttoLisp: instance [overlap ok] FromLisp Float
+ Data.AttoLisp: instance [overlap ok] FromLisp Int
+ Data.AttoLisp: instance [overlap ok] FromLisp Int16
+ Data.AttoLisp: instance [overlap ok] FromLisp Int32
+ Data.AttoLisp: instance [overlap ok] FromLisp Int64
+ Data.AttoLisp: instance [overlap ok] FromLisp Int8
+ Data.AttoLisp: instance [overlap ok] FromLisp Integer
+ Data.AttoLisp: instance [overlap ok] FromLisp Lisp
+ Data.AttoLisp: instance [overlap ok] FromLisp Number
+ Data.AttoLisp: instance [overlap ok] FromLisp Text
+ Data.AttoLisp: instance [overlap ok] FromLisp Word
+ Data.AttoLisp: instance [overlap ok] FromLisp Word16
+ Data.AttoLisp: instance [overlap ok] FromLisp Word32
+ Data.AttoLisp: instance [overlap ok] FromLisp Word64
+ Data.AttoLisp: instance [overlap ok] FromLisp Word8
+ Data.AttoLisp: instance [overlap ok] FromLisp [Char]
+ Data.AttoLisp: instance [overlap ok] FromLisp a => FromLisp (Maybe a)
+ Data.AttoLisp: instance [overlap ok] FromLisp a => FromLisp [a]
+ Data.AttoLisp: instance [overlap ok] Functor Parser
+ Data.AttoLisp: instance [overlap ok] Functor Result
+ Data.AttoLisp: instance [overlap ok] IsString Lisp
+ Data.AttoLisp: instance [overlap ok] Monad Parser
+ Data.AttoLisp: instance [overlap ok] Monad Result
+ Data.AttoLisp: instance [overlap ok] MonadPlus Parser
+ Data.AttoLisp: instance [overlap ok] MonadPlus Result
+ Data.AttoLisp: instance [overlap ok] Monoid (Parser a)
+ Data.AttoLisp: instance [overlap ok] Monoid (Result a)
+ Data.AttoLisp: instance [overlap ok] NFData Lisp
+ Data.AttoLisp: instance [overlap ok] NFData a => NFData (Result a)
+ Data.AttoLisp: instance [overlap ok] Ord Lisp
+ Data.AttoLisp: instance [overlap ok] ParseList' HFalse a a
+ Data.AttoLisp: instance [overlap ok] Show Lisp
+ Data.AttoLisp: instance [overlap ok] Show a => Show (Result a)
+ Data.AttoLisp: instance [overlap ok] ToLisp ()
+ Data.AttoLisp: instance [overlap ok] ToLisp (Ratio Integer)
+ Data.AttoLisp: instance [overlap ok] ToLisp Bool
+ Data.AttoLisp: instance [overlap ok] ToLisp Char
+ Data.AttoLisp: instance [overlap ok] ToLisp Double
+ Data.AttoLisp: instance [overlap ok] ToLisp Float
+ Data.AttoLisp: instance [overlap ok] ToLisp Int
+ Data.AttoLisp: instance [overlap ok] ToLisp Int16
+ Data.AttoLisp: instance [overlap ok] ToLisp Int32
+ Data.AttoLisp: instance [overlap ok] ToLisp Int64
+ Data.AttoLisp: instance [overlap ok] ToLisp Int8
+ Data.AttoLisp: instance [overlap ok] ToLisp Integer
+ Data.AttoLisp: instance [overlap ok] ToLisp Lisp
+ Data.AttoLisp: instance [overlap ok] ToLisp Number
+ Data.AttoLisp: instance [overlap ok] ToLisp Text
+ Data.AttoLisp: instance [overlap ok] ToLisp Word
+ Data.AttoLisp: instance [overlap ok] ToLisp Word16
+ Data.AttoLisp: instance [overlap ok] ToLisp Word32
+ Data.AttoLisp: instance [overlap ok] ToLisp Word64
+ Data.AttoLisp: instance [overlap ok] ToLisp Word8
+ Data.AttoLisp: instance [overlap ok] ToLisp [Char]
+ Data.AttoLisp: instance [overlap ok] ToLisp a => ToLisp (Maybe a)
+ Data.AttoLisp: instance [overlap ok] ToLisp a => ToLisp [a]
+ Data.AttoLisp: instance [overlap ok] TypeCast f HFalse => IsFunction a f
+ Data.AttoLisp: instance [overlap ok] TypeCast f HTrue => IsFunction (x -> y) f
+ Data.AttoLisp: instance [overlap ok] TypeCast' () a b => TypeCast a b
+ Data.AttoLisp: instance [overlap ok] TypeCast'' () a a
+ Data.AttoLisp: instance [overlap ok] TypeCast'' t a b => TypeCast' t a b
+ Data.AttoLisp: instance [overlap ok] Typeable Lisp
+ Data.AttoLisp: instance [overlap ok] Typeable1 Result
Files
- Data/AttoLisp.hs +40/−7
- atto-lisp.cabal +1/−1
Data/AttoLisp.hs view
@@ -1,7 +1,7 @@ {-# LANGUAGE OverloadedStrings, Rank2Types, DeriveDataTypeable, BangPatterns #-} -- The following is for the ParseList stuff {-# LANGUAGE MultiParamTypeClasses, FunctionalDependencies, FlexibleInstances,- UndecidableInstances #-}+ UndecidableInstances, ScopedTypeVariables, OverlappingInstances, EmptyDataDecls #-} -- | Efficient parsing and serialisation of S-Expressions (as used by Lisp). -- -- This module is intended to be imported qualified, e.g.:@@ -305,15 +305,48 @@ class ParseList a b | a -> b where parseList :: String -> a -> [Lisp] -> Parser b -instance (FromLisp a, ParseList b c) => ParseList (a -> b) c where- parseList msg _ [] = fail $ "Too few arguments for object: " ++ msg- parseList msg f (x:xs) = do+instance (IsFunction a f, ParseList' f a b) => ParseList a b where+ parseList = parseList' (undefined :: f)++class ParseList' f a b | f a -> b where+ parseList' :: f -> String -> a -> [Lisp] -> Parser b++instance (FromLisp a, IsFunction b f, ParseList' f b c, ParseList b c)+ => ParseList' HTrue (a -> b) c where+ parseList' _ msg _ [] = fail $ "Too few arguments for object: " ++ msg+ parseList' _ msg f (x:xs) = do y <- parseLisp x parseList msg (f y) xs -instance ParseList a a where- parseList _msg r [] = return r- parseList msg _ (_:_) = fail $ "Too many arguments for object: " ++ msg+instance ParseList' HFalse a a where+ parseList' _ _msg r [] = return r+ parseList' _ msg _ (_:_) = fail $ "Too many arguments for object: " ++ msg++data HTrue+data HFalse++class IsFunction a b | a -> b++instance TypeCast f HTrue => IsFunction (x -> y) f+instance TypeCast f HFalse => IsFunction a f++class TypeCast a b | a -> b, b -> a where+ typeCast :: a -> b++class TypeCast' t a b | t a -> b, t b -> a where+ typeCast' :: t -> a -> b++class TypeCast'' t a b | t a -> b, t b -> a where+ typeCast'' :: t -> a -> b++instance TypeCast' () a b => TypeCast a b where+ typeCast x = typeCast' () x++instance TypeCast'' t a b => TypeCast' t a b where+ typeCast' = typeCast''++instance TypeCast'' () a a where+ typeCast'' _ x = x -- | Decode structure serialised with 'mkStruct'. --
atto-lisp.cabal view
@@ -1,5 +1,5 @@ name: atto-lisp-version: 0.2+version: 0.2.1 license: BSD3 license-file: LICENSE author: Thomas Schilling <nominolo@googlemail.com>