<div dir="ltr"><br><div class="gmail_extra"><br><br><div class="gmail_quote">On Wed, Aug 20, 2014 at 11:38 AM, David Mertz <span dir="ltr"><<a href="mailto:mertz@gnosis.cx" target="_blank">mertz@gnosis.cx</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex"><div dir="ltr"><div class=""><div>On Wed, Aug 20, 2014 at 11:14 AM, Bob Ippolito <<a href="mailto:bob@redivi.com" target="_blank">bob@redivi.com</a>> wrote:<br>
> There's the misunderstanding: PyContracts style contracts are not "easy enough" in Haskell.<br>
</div><div><br></div></div>Well, for example, I found something like this for Haskell:<br><br><blockquote style="margin:0px 0px 0px 40px;border:none;padding:0px"><font face="courier new, monospace">newtype Digit = Digit { digitVal :: Int }<br>

  deriving (Eq, Ord, Show)<br>mkDigit :: Int -> Maybe Digit<br>mkDigit n<br>  | n >= 0 && n < 10 = Just (Digit n)<br>  | otherwise = Nothing</font></blockquote><br>OK, sure it's not just one line.  But now we have a predicate-restricted data type right in the type system.  If we introduce a static type system in Python, I'd like it to be able to do that. […]</div>
</blockquote><div><br></div><div>This isn't in the type system. This is what is called a smart constructor [1]. These predicates are strictly a runtime construct, not compile time. Guard syntax (a sequence of pipes each followed by a predicate and then an equal sign and some term) is just a convenient way to write if[/else if…]/else.</div>
<div> </div><div>There are ways to do this specific sort of dependent typing [2] in Haskell using an unholy combination of GHC-specific extensions and the absolute latest compiler. This is exciting research, but not so practical today.</div>
<div><br></div><div>[1] <a href="http://www.haskell.org/haskellwiki/Smart_constructors">http://www.haskell.org/haskellwiki/Smart_constructors</a></div><div>[2] <a href="http://en.wikipedia.org/wiki/Dependent_type">http://en.wikipedia.org/wiki/Dependent_type</a></div>
<div><br></div><div>-bob</div><div><br></div></div></div></div>