Uma Breve Correção
1 Texto
No artigo <m1vfm4n…@tti5.uchicago.edu>, Matthias Blume escreveu:
Neelakantan Krishnaswami <ne…@cs.cmu.edu> escreveu:
---------------------------------–—QUOTE--------------------------------–—
R: Que exigente. Temos a mônada
optionoumaybe, que representa computações que podem ou retornar um valor ou falhar com um erro.(define fail (vector 'fail)) ; fail não é eq? a nenhuma outra coisa(define (unit x) x)(define (bind m f)(if (eq? m fail)fail(f m)))---------------------------------–—QUOTE--------------------------------–—
Vou ser um pouco mais exigente aqui, porque infelizmente esta "mônada" não satisfaz nem mesmo a primeira lei:
(define (f x)(if (eq? x fail)"got you!""who cares"))(bind (unit fail) f) ; --> fail(f fail) ; --> "got you!"
A propósito, isso demonstra belamente o que há de errado na prática comum de usar "um valor distintivo" para representar falha (ou ausência de valor) em linguagens não tipadas…
Nossa, você tem razão! Deixe-me tentar consertar.
; Uma mônada option em Scheme(define (unit x) (car 'maybe x))(define (bind m f)(if m(f (cdr m))#f))(define zero #f)(define (plus a b)(or a b))
A relação entre o operador or e o plus monádico é ainda mais clara que no
original, então quanto melhor, melhor :)
2 META
- Autor: Neelakantan Krishnaswami
- Link: https://groups.google.com/forum/#!original/comp.lang.functional/BH6gxLnjoHQ/QtSnY6Xy2NEJ
- Arquivo: http://archive.is/55msS