<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/'><id>tag:blogger.com,1999:blog-6839602.post8391585046753089908..comments</id><updated>2008-01-10T04:38:05.761-08:00</updated><category term='grammar checking'/><category term='Leibniz equality'/><category term='sized lists'/><category term='definability'/><category term='Heyting algebra'/><category term='static analysis'/><category term='bugs'/><category term='Coq'/><category term='Fomega'/><category term='V=L'/><category term='constructive logic'/><category term='type disequality'/><category term='morphisms'/><category term='nested types'/><category term='flow caml'/><category term='countability'/><category term='kinds'/><category term='impredicativity'/><category term='fuzzy logic'/><category term='termination'/><category term='lightweight static capabilities'/><category term='Simulating Dependent Types with Guarded Algebraic Datatypes'/><category term='C++'/><category term='Haskell'/><category term='Liskov substitutability'/><category term='effects'/><category term='information flow'/><category term='effect inference'/><category term='zero-knowledge proof'/><category term='cardinal numbers'/><category term='_|_'/><category term='CPOs'/><category term='dependent types'/><category term='continuity'/><category term='OOP'/><category term='Dependent ML'/><category term='copious free time'/><category term='parallel or'/><category term='GHC'/><category term='GADTs'/><category term='polymorphism'/><category term='laypeople'/><category term='quotient types'/><category term='refinement types'/><category term='ML'/><category term='referential transparency'/><category term='ordinals'/><category term='conferences'/><title type='text'>Comments on Everyone Else is Crazy: Extra type safety using polymorphic types as first...</title><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://blog.jbapple.com/feeds/8391585046753089908/comments/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6839602/8391585046753089908/comments/default'/><link rel='alternate' type='text/html' href='http://blog.jbapple.com/2008/01/extra-type-safety-using-polymorphic.html'/><author><name>Jim Apple</name><uri>http://www.blogger.com/profile/11080395413026172939</uri><email>noreply@blogger.com</email><gd:image xmlns:gd='http://schemas.google.com/g/2005' rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='32' src='http://www.jbapple.com/me-in-suit.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>1</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-6839602.post-4409332515055019802</id><published>2008-01-10T04:38:00.000-08:00</published><updated>2008-01-10T04:38:00.000-08:00</updated><title type='text'>The reasons for the implementations being differen...</title><content type='html'>The reasons for the implementations being different is that ESC did not support if or where at the time the paper was written. In addition, the ESC paper does not use a type class, but is restricted to Int in the type of risers. Catch does use a very identical to the one you present.&lt;BR/&gt;&lt;BR/&gt;You also miss one way to remove the error. If you have a highly-optimising compiler, such as Supero http://www-users.cs.york.ac.uk/~ndm/supero/ it can actually optimise away the error case. If that happens, you can guarantee the original code is safe.&lt;BR/&gt;&lt;BR/&gt;I also don't necessarily disagree that functions are hard to transform, in the most part. Occasionally you get a tricky one, but the majority are probably trivial. The problem is that as soon as you introduce a few hoops in front of someone, they tend to stop, and don't check their code is correct. Catch is partly about proving difficult functions, and partly about automating ones you could have done manually.&lt;BR/&gt;&lt;BR/&gt;It's nice that you can use these techniques to enforce the invariant, but you would still need to add some kind of "did the user use these techniques everywhere" check afterwards. Just because you supply a safe list, the user is free to use the original list data type in other places, and it won't be immediately obvious.</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6839602/8391585046753089908/comments/default/4409332515055019802'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6839602/8391585046753089908/comments/default/4409332515055019802'/><link rel='alternate' type='text/html' href='http://blog.jbapple.com/2008/01/extra-type-safety-using-polymorphic.html?showComment=1199968680000#c4409332515055019802' title=''/><author><name>Neil Mitchell</name><uri>http://www.blogger.com/profile/13084722756124486154</uri><email>noreply@blogger.com</email><gd:image xmlns:gd='http://schemas.google.com/g/2005' rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://www-users.cs.york.ac.uk/~ndm/elements/my-photo.jpg'/></author><thr:in-reply-to xmlns:thr='http://purl.org/syndication/thread/1.0' href='http://blog.jbapple.com/2008/01/extra-type-safety-using-polymorphic.html' ref='tag:blogger.com,1999:blog-6839602.post-8391585046753089908' source='http://www.blogger.com/feeds/6839602/posts/default/8391585046753089908' type='text/html'/><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='blogger.itemClass' value='pid-1775208784'/></entry></feed>
