Re: Wincomplete-uni-patterns and bidirectional patterns

Olaf Klinke <[email protected]>
Newsgroups gmane.comp.lang.haskell.cafe
Message-ID <[email protected]>
> For functions types, there is only one equivalence class, because
> there
> is only one way to pattern-match a function. Observe that two
> elements
> can be distinguished by a set of patterns if and only if there is one
> element in the pattern set that already distinguishes them. Do
> pattern
> synonyms refine the equivalence relation induced by ordinary
> constructors? No.

What I said is only true in the absence of view patterns. 
With view patterns, a pattern match is no longer guaranteed to
terminate, since the viewing function could diverge on the value being
matched. Consider

-- diverges on infinite lists
end :: [a] -> [a]
end xs = case tl xs of
    [] -> []
    (_:xs') -> end xs'

pattern Finite <- (end -> [])
isFinite :: [a] -> Bool
isFinite xs = case xs of
    Finite -> True
    _ -> False

Notice that isFinite is no longer a clopen but an open: It either
returns True or diverges. Moreover, view patterns introduce fine-
grained clopens on function spaces, like

pattern Q <- (($ 4) -> 3)

We must conclude that in the presence of the ViewPatterns extension,
the equivalenve relation induced by pattern matching is: 
"x~y whenever there is no function v and no pattern P such that (v x)
and (v y) can be distinguished by P." It should not be hard to prove
that deciding coverage by view patterns such as Finite would solve the
halting problem. 

Olaf 

_______________________________________________
Haskell-Cafe mailing list
To (un)subscribe, modify options or view archives go to:
http://mail.haskell.org/cgi-bin/mailman/listinfo/haskell-cafe
Only members subscribed via the mailman list are allowed to post.
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.