[Haskell-cafe] Manual type-checking in graphs: Avoidable?
_deepfire at feelingofgreen.ru
Fri Feb 19 12:06:42 UTC 2016
Jeffrey Brown <jeffbrown.the at gmail.com> writes:
> I use FGL, which (roughly) defines type Gr a b as a graph on nodes of
> type a and edges of type b.
> Suppose you wanted a graph that described which people own which
> hamsters, knowing only their name. You would have to make node and
> edge types like this:
> data GraphNode = Person String | Hamster String
> data GraphEdge = Has
> where the strings represent their names.
> Suppose then you wanted to write a function that, given a person,
> returns the names of all their hamsters. To make sure the call makes
> sense, the function would have to first check that the input is in
> fact a person. Since persons and hamsters are both constructors of the
> same type, you can't let Haskell's robust, beautiful type-checking
> system distinguish them for you; you've got to write something like
> "case n of Person _ -> True; _ -> False".
I'll allow myself to rephrase what Tom Ellis already said more strongly.
Type systems are tools for making invalid values unrepresentable.
If you find yourself in a situation where a certain solution doesn't
allow you to do that -- keep looking.
с уважениeм / respectfully,
More information about the Haskell-Cafe