I'm just learning D, so please bear with me if I'm asking something naive.

Consider the following code skeleton:

    // in part A of the application...
// -------------------------------------------------------------
    alias bool function(int n) validator_t;
    bool isEven(int n) { ... }
    bool isPrime(int n) { ... }
    /**
     * keeps asking for an int from the user until it passes
     * the given validator.
     */
    int readInt(string prompt, validator_t validator) { ... }

// in part B of the application which knows nothing about part A // -------------------------------------------------------------
    /**
     * does something that involves reading an integer from input
     */
    void foo(intReader_t reader) { ... }

I'm trying to pass curried versions of `readInt` to `foo`.
Obviously, I don't wish part B to know about the details of a "reader" nor I'd like to pass `prompt` and `validator` to `foo` (this really doesn't concern `foo` at all).

I see that the solution is using `partial` from `std.functional`; for example:

    partial!(partial!(readInt, "Enter an integer:"), &isEven)

However, I'm not sure if this is correct (let alone idiomatic!) and even if this is the correct way of currying `readInt`, what should be the signature of `foo`?

I'd appreciate any help/hint on this.

Reply via email to