www.digitalmars.com         C & C++   DMDScript  

digitalmars.D.learn - Writing pattern matching macros in D.

reply Deech <aditya.siram gmail.com> writes:
Hi all,
I've been reading up on D's metaprogramming features and was 
wondering if it was possible to use them to add pattern matching 
to the language as a macro. The template mixin feature seems to 
require putting the new syntax in strings. I was hoping there's 
an alternative.
Thanks!
-deech
Mar 05 2017
next sibling parent sarn <sarn theartofmachinery.com> writes:
On Monday, 6 March 2017 at 02:20:02 UTC, Deech wrote:
 Hi all,
 I've been reading up on D's metaprogramming features and was 
 wondering if it was possible to use them to add pattern 
 matching to the language as a macro. The template mixin feature 
 seems to require putting the new syntax in strings. I was 
 hoping there's an alternative.
 Thanks!
 -deech
It isn't possible in the same way it is in, say, Rust. This has come up before and Walter has strong opinions against that kind of rewriting macro. This is what's currently implemented: https://dlang.org/phobos/std_variant.html#visit
Mar 05 2017
prev sibling parent reply David Nadlinger <code klickverbot.at> writes:
On Monday, 6 March 2017 at 02:20:02 UTC, Deech wrote:
 […] add pattern matching to the language as a macro.
D doesn't have macros per se. However, template metaprogramming and mixins can replace them in many cases. Which particular form of pattern matching do you have in mind? You won't get all the way to Haskell (or even Prolog) levels of functionality in a generic way, but for limited use cases, it is definitely possible. — David
Mar 06 2017
parent reply Deech <aditya.siram gmail.com> writes:
On Monday, 6 March 2017 at 08:27:13 UTC, David Nadlinger wrote:
 On Monday, 6 March 2017 at 02:20:02 UTC, Deech wrote:
 […] add pattern matching to the language as a macro.
D doesn't have macros per se. However, template metaprogramming and mixins can replace them in many cases. Which particular form of pattern matching do you have in mind? You won't get all the way to Haskell (or even Prolog) levels of functionality in a generic way, but for limited use cases, it is definitely possible. — David
I was thinking something on the order of Scala's pattern matching using apply/unapply methods. http://www.artima.com/pins1ed/extractors.html.
Mar 06 2017
parent Jacob Carlborg <doob me.com> writes:
On 2017-03-06 17:27, Deech wrote:

 I was thinking something on the order of Scala's pattern matching using
 apply/unapply methods. http://www.artima.com/pins1ed/extractors.html.
That should be possible. Although not as a macro and not with the same nice syntax. Something like this should be possible: 1.match( 3, e => writeln("value is 3"), (int e) => writeln("value is an integer"), () => writeln("fallback") ); -- /Jacob Carlborg
Mar 06 2017