<div dir="ltr"><div class="gmail_extra"><div class="gmail_quote">On Fri, Sep 18, 2015 at 9:00 PM, Andrew Bernard <span dir="ltr"><<a href="mailto:andrew.bernard@gmail.com" target="_blank">andrew.bernard@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Is this how normal Haskell is developed and written in practice? I find the type and the function impenetrably dense and difficult to understand. Should I be aspiring to have my functions look and work like this? Of course it depends on what you want to do, but the essence of the question is, does Haskell ultimately end up looking like this for any real programming, beyond textbook list manipulation functions?</blockquote></div><br>If you need that, then yes. If not, then no.</div><div class="gmail_extra"><br></div><div class="gmail_extra">Usually that kind of thing is packaged up in higher level libraries; the type Eval6 would be exposed, the underlying stuff is used internally and you would not normally need to know or care about it unless you were specifically working on the internals of that library. Most applications you would write, you only care about Eval6 and any functions exported along with it.</div><div class="gmail_extra"><br></div><div class="gmail_extra">That said, I think in most cases you would use a newtype and derive through MonadReader, MonadError, MonadState, and MonadIO so you can ignore precisely how the type was built and just use it.</div><div class="gmail_extra"><div><br></div>-- <br><div class="gmail_signature"><div dir="ltr"><div>brandon s allbery kf8nh                               sine nomine associates</div><div><a href="mailto:allbery.b@gmail.com" target="_blank">allbery.b@gmail.com</a>                                  <a href="mailto:ballbery@sinenomine.net" target="_blank">ballbery@sinenomine.net</a></div><div>unix, openafs, kerberos, infrastructure, xmonad        <a href="http://sinenomine.net" target="_blank">http://sinenomine.net</a></div></div></div>
</div></div>