[Haskell-cafe] Manual type-checking in graphs: Avoidable?
Francesco Ariis
fa-ml at ariis.it
Fri Feb 19 06:29:48 UTC 2016
On Thu, Feb 18, 2016 at 09:28:24PM -0800, Jeffrey Brown wrote:
> I had not!
>
> I'm not seeing how such a solution would work. The nodes in a graph all
> have to have the same type. If the phantom parameter distinguished two
> nodes, they could not be used together.
>
> But maybe you see something there that I don't?
Argh, indeed you are correct. Maybe it can be worked around with
existential quantification like this?
{-# LANGUAGE FlexibleInstances #-}
{-# LANGUAGE ExistentialQuantification #-}
data Person = Person
data Hamster = Hamster
data GraphNode a = P String -- hide these
| H String
-- coll. of vertices
data HumHamGraph = forall c . Test c => Gr [(c, c)]
findCritters :: HumHamGraph -> GraphNode Person -> GraphNode Hamster
findCritters = undefined
class Test a where
name :: a -> String
instance Test (GraphNode Person) where
name (P s) = s
instance Test (GraphNode Hamster) where
name (H s) = s
toast = [(P "a,ga", H "beta"), (H "cas", P "cds")]
For sure it looks ugly :s
More information about the Haskell-Cafe
mailing list