-
Notifications
You must be signed in to change notification settings - Fork 47
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Define a Tupleable instance with a subrelation #351
Comments
I couldn't find the code but I once wrote something like an instance For what its worth, |
Thanks, I will try that! Do you guys think it's something useful to have? Should I make a pull request? |
A shortcut here could be to wrap the specific list item with Certainly, if you make some progress on this front, a PR would be much appreciated. |
@Valdsonjr , were you able to resolve this issue? |
@agentm I made it work with this ugly thing: {-# LANGUAGE ScopedTypeVariables #-}
-- 'throws' something that is not a member of the Exception type class
throwIfLeft :: (Show a) => Either a b -> b
throwIfLeft = either (error . show) id
instance (Tupleable a, NFData a, Ord a, Serialise a, Show a) => Atomable (Set a) where
toAtom :: Set a -> Atom
toAtom set = RelationAtom (Relation attrs tuples)
where
tuples = RelationTupleSet $ map toTuple $ toList set
attrs = toAttributes (Proxy :: Proxy a)
fromAtom :: Atom -> Set a
fromAtom (RelationAtom (Relation _ (RelationTupleSet tuples))) =
fromList $ map (throwIfLeft . fromTuple) tuples
fromAtom _ = error "wrong Atom constructor for (Set a)"
toAtomType :: proxy (Set a) -> AtomType
toAtomType _ = RelationAtomType (toAttributes (Proxy :: Proxy a)) I really wish I could remove some of those constraints, but at least it works for my toy programs |
That code is pretty straightforward- I'll wrap it into Project:M36, if you don't mind. What bothers you about the constraints? |
@agentm Sure! I can open the PR tomorrow night if you want. (and add the toAddTypeExpr)
I felt like there were too many constraints but on second thought I don't know of any other way |
Right now, haskell datatypes with list attributes are derived as
t :: List (a :: SomeTypeT)
is there a way of forcing the deriving mechanism to uset :: relation {a::SomeTypeT}
instead?The text was updated successfully, but these errors were encountered: