2016-10-13 4 views
0

Я не понимаю, почему я получаю эту ошибку «bmDup is not a function», в то время как информация говорит мне, что мне нужно получить «Maybe».
Если я оберну его в функцию, это возврат не определен.Monad - метод связывания

function Maybe() { 
 
    Object.freeze(this); 
 
}; 
 

 
function Just (x) { 
 
    this.toString = function() { return "Just " + x.toString(); }; 
 
    this.just = x; 
 
    Object.freeze(this); 
 
}; 
 
Just.prototype = new Maybe(); 
 
Just.prototype.constructor = Just; 
 

 
function Nothing() { 
 
    this.toString = function() { return "Nothing"; }; 
 
    Object.freeze(this); 
 
}; 
 
Nothing.prototype = new Maybe(); 
 
Nothing.prototype.constructor = Nothing; 
 

 
Maybe.unit = function (x) { 
 
    // return a Maybe that holds x 
 
    return new Just (x); 
 
}; 
 

 
Maybe.bind = function (f) { 
 
    // given a function from a value to a Maybe return a function from a Maybe to a Maybe 
 
    return new Maybe(f(this.just)); 
 
}; 
 

 
//to test 
 
function mDup(str) { 
 
    return new Just(str+str); 
 
} 
 
console.log(mDup("abc"));   // => new Just("abcabc") OK 
 
var bmDup = Maybe.bind(mDup); 
 
console.log(bmDup(new Just("abc"))) // => new Just("abcabc") NOK

+0

Вы действительно должны попробовать строгий режим, чтобы все эти ошибки отображались как исключения. – Bergi

ответ

1

Во-первых, давайте посмотрим на то, что на самом деле делает Maybe.bind.

Maybe.bind = function (f) { 
    // Construct a new Maybe object, passing in the result of f(this.just) 
    return new Maybe(f(this.just)); 
}; 

Хорошо, а что такое объект Maybe?

function Maybe() { 
    Object.freeze(this); 
}; 

Ну, это замороженный объект. Таким образом, Maybe.bind возвращает объект, а не функцию.

+0

Инструкции говорят, что мне нужно вернуть Maybe, который не является функцией. Поэтому я не понимаю, что это означает: «если функция имеет значение от значения до« Может быть, возвратит функцию из «Возможно, к« Может »», не так ли? – kalia

+0

@kalia У меня есть я. Каждый раз, когда я думаю, что понимаю монады, я понимаю, что я этого не делаю. –

 Смежные вопросы

  • Нет связанных вопросов^_^