Functional oriented programming in D
via Digitalmars-d-learn
digitalmars-d-learn at puremagic.com
Thu Jul 16 02:49:01 PDT 2015
Hi
After a couple of years using and keeping an eye on D I have
grown into a functional oriented programmer. I began with
JavaScripts semi pseudo functional style, then Clojures dynamic
functional style, Haskells burritos and now Scala.
I have began to dislike Haskell for the academic approach to
programming. To do anything you must think and think again. The
knowledge you need to code haskell is more than the syntax and
rules.
Then i thought about D some days ago. Thought Id give it a new
try. Take a new look. See if something had changed from my side
or the language. Well certainly from my side given the fact that
I am no longer an OO programmer. Well i do OO stuff everyday, but
despise it and remind myself and other devs how this could have
be done better.
I found that there is std.algorithm, std.functional and lambda
expressions in D. Thats very interesting. It gives a promise that
I can use those tools to create (almost) class less programs. I
initiated a vibe.d project and tried to change the listen handler
to a lamdba expression:
listenHTTP(settings, (req, res) => res.writeBody("Hello,
World!"));
And it worked obviously well.
But when I changed it to multiline lambda:
listenHTTP(settings, (req, res) => {
res.writeBody("Hello, World!");
});
It gave me an error:
[jarl at galifrey vibed-app] $ dub
Target vibe-d 0.7.23 is up to date. Use --force to rebuild.
Building vibed-app ~master configuration "application", build
type debug.
Compiling using dmd...
source/app.d(8,12): Error: None of the overloads of 'listenHTTP'
are callable using argument types (HTTPServerSettings, void),
candidates are:
../../.dub/packages/vibe-d-0.7.23/source/vibe/http/server.d(71,6): vibe.http.server.listenHTTP(HTTPServerSettings settings, void delegate(HTTPServerRequest req, HTTPServerResponse res) request_handler)
../../.dub/packages/vibe-d-0.7.23/source/vibe/http/server.d(95,6): vibe.http.server.listenHTTP(HTTPServerSettings settings, void function(HTTPServerRequest req, HTTPServerResponse res) request_handler)
../../.dub/packages/vibe-d-0.7.23/source/vibe/http/server.d(100,6): vibe.http.server.listenHTTP(HTTPServerSettings settings, HTTPServerRequestHandler request_handler)
FAIL
.dub/build/application-debug-linux.posix-x86_64-dmd_2067-006B89616986857CBBFCCB1EAEA3E85E/ vibed-app executable
Error executing command run:
dmd failed with exit code 1.
Which I belive means that a single line lambda is a different
object type than multiline lambda?
Why?
More information about the Digitalmars-d-learn
mailing list