[Haskell-beginners] Exercise of "Programming with Arrows"

Thiago Negri evohunz at gmail.com
Wed Oct 16 17:41:57 UTC 2013


Thanks for your words.

The only hit I get in DuckDuckGo was this:
http://sigkill.dk/programs/arrows/

I've tried things like this, and I couldn't make it work.
Yet I've copy&pasted the code, and it worked! Even with the "loop_bufid"
test!

:(

I'll take a deeper look into it.



2013/10/16 Kim-Ee Yeoh <ky3 at atamo.com>

> On Wed, Oct 16, 2013 at 10:33 PM, Thiago Negri <evohunz at gmail.com> wrote:
>
>> Okay, I solved the exact test case the paper proposed.
>>
>
> Awesome!
>
> Now I've hit another problem:
>>
>> > loop_bufid :: SP a a
>> > loop_bufid = loop (Get (\a -> Get (\b -> Put a (Put b id))))
>>
>
> Even better! I was kinda worried that you weren't going to get to this
> stage.
>
> So here's what I see:
>
> * this is a problem harder than it look (duh!)
>
> * that you've got this far is super-impressive: search "instance ArrowLoop
> SP" to see what others have attempted
>
> And you know what? I don't think there's a solution, not in this
> generality at least.
>
> Let's break up the problem a bit:
>
> (A) the fifo/buffer/queue suggested by the problem needs to have
> Time-Travelling Superpowers. Even when it's empty, you can query values
> (supplied from the future) to keep your computation running. Oh, and
> obviously, it's gotta be infinite, i.e. no fixed capacity.
>
> (B) some SPs simply won't evaluate to anything meaningful (relative to
> standard metaphysics) under loop, e.g.
>
> existentialism :: SP (String, Bool) (String, Bool)
> existentialism = let r = Get( \(_,x) -> Put( if x then "Heaven" else
> "Hell", not x ) r ) in r
>
> Either of (A) or (B) is worthy of pursuit.
>
> (A) is very haskell-y because one can't even imagine these things using
> other languages, all of which fall under strict semantics. Good evidence of
> Sapir-Whorf, don't you think?
>
> For (B), I'd think about restricting the space of SPs to get rid of some
> of the junk. E.g. allow SPs such as Get...Put...Get...Get...Get..., but not
> those that whose constructors VARY according to the Get binding,
> essentially the Applicatives vs Monads distinction.
>
> (B), whose mantra is Make the Meaningless/Buggy Un-Codeable, is
> immediately useful in all PLs, but Haskell's type system gives the
> programmer uniquely powerful leverage in that direction.
>
> -- Kim-Ee
>
> _______________________________________________
> Beginners mailing list
> Beginners at haskell.org
> http://www.haskell.org/mailman/listinfo/beginners
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.haskell.org/pipermail/beginners/attachments/20131016/3c544a4a/attachment.html>


More information about the Beginners mailing list