7 ms·
Using do-notation is probably cheating, but what do you think of this? (in Haskell): do { w <- widgets; s <- sprockets; l <- locations;
by maxtilford 17y ago
Using do-notation is probably cheating, but what do you think of this? (in Haskell):
do { w <- widgets;
s <- sprockets;
l <- locations;
guard (l `hasInStock` w);
guard (l `hasInStock` s);
guard (w `isUsableWith` s);
return (w, s, l); }
We're trading horizontal space for vertical space. I think it's much clearer than either list comprehensions or plain map/filters. It's the best of both worlds.
- frig 17y agoI like the look of it. Am I correct that the order the statements are in translates into the order things are evaluated in when the code is called? If eg I edited it to be: do { l <- locations; w <- widgets; guard (l `hasInStock` w); s <- sprockets; guard (l `hasInStock` s); guard (w `isUsableWith` s); return (w,s,l); } Does that force it to go through "location-first" and only check the w and s of (w,s,l) for compatibility if it has already ascertained that w and s are in stock @ l?
- maxtilford 17y agoYes, that's correct.