aterm-utils 0.2.0.1 → 0.2.0.2
raw patch · 2 files changed
+16/−3 lines, 2 filesPVP: minor bump suggested
API additions: PVP suggests at least a minor version bump
API changes (from Hackage documentation)
+ ATerm.Generics: atermToTriple :: (FromATerm a, FromATerm b, FromATerm c) => ATerm -> Maybe (a, b, c)
+ ATerm.Generics: instance (ToATerm a, ToATerm b, ToATerm c) => ToATerm (a, b, c)
+ ATerm.Generics: tripleToATerm :: (ToATerm a, ToATerm b, ToATerm c) => (a, b, c) -> ATerm
Files
- aterm-utils.cabal +1/−1
- src/ATerm/Generics.hs +15/−2
aterm-utils.cabal view
@@ -1,5 +1,5 @@ name: aterm-utils-version: 0.2.0.1+version: 0.2.0.2 synopsis: Utility functions for working with aterms as generated by Minitermite -- description: license: BSD3
src/ATerm/Generics.hs view
@@ -68,6 +68,8 @@ toATermList = listToATerm instance ToATerm a => ToATerm [a] where toATerm = toATermList +instance (ToATerm a, ToATerm b, ToATerm c) => ToATerm (a,b,c) where toATerm = tripleToATerm+ -- Base type implementations integralToATerm :: Integral a => a -> ATerm integralToATerm x = AInt (toInteger x) []@@ -84,6 +86,9 @@ tupleToATerm :: (ToATerm a, ToATerm b) => (a,b) -> ATerm tupleToATerm (a,b) = AAppl [] [toATerm a, toATerm b] [] +tripleToATerm :: (ToATerm a, ToATerm b, ToATerm c) => (a,b,c) -> ATerm+tripleToATerm (a,b,c) = AAppl [] [toATerm a, toATerm b, toATerm c] []+ ------------------------------------------------------------------------ -- Deserialization ------------------------------------------------------------------------@@ -104,11 +109,11 @@ instance FromATerm Bool instance FromATerm Float instance FromATerm Double-instance (FromATerm a, FromATerm b, FromATerm c) => FromATerm (a, b, c) instance (FromATerm a, FromATerm b) => FromATerm (Either a b) instance FromATerm a => FromATerm (Maybe a) -instance (FromATerm a, FromATerm b) => FromATerm (a,b) where fromATerm = atermToTuple+instance (FromATerm a, FromATerm b) => FromATerm (a,b) where fromATerm = atermToTuple+instance (FromATerm a, FromATerm b, FromATerm c) => FromATerm (a, b, c) where fromATerm = atermToTriple instance FromATerm Int where fromATerm = atermToIntegral instance FromATerm Integer where fromATerm = atermToIntegral@@ -140,6 +145,14 @@ b' <- fromATerm b return (a',b') atermToTuple _ = Nothing++atermToTriple :: (FromATerm a, FromATerm b, FromATerm c) => ATerm -> Maybe (a,b,c)+atermToTriple (AAppl "" [a,b,c] []) = do+ a' <- fromATerm a+ b' <- fromATerm b+ c' <- fromATerm c+ return (a',b',c')+atermToTriple _ = Nothing ------------------------------------------------------------------------ -- Generic data type deserialization ------------------------------------------------------------------------