Uma Breve Correção
Table of Contents
No artigo <m1vfm4n…@tti5.uchicago.edu>, Matthias Blume escreveu:
Neelakantan Krishnaswami <ne…@cs.cmu.edu> escreveu:
---------------------------------–—QUOTE--------------------------------–—
R: Que exigente. Temos a mônada
option
oumaybe
, 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 :)
1 META
Autor | Neelakantan Krishnaswami |
Link | https://groups.google.com/forum/#!original/comp.lang.functional/BH6gxLnjoHQ/QtSnY6Xy2NEJ |
Arquivo | http://archive.is/55msS |
Created: 2018-12-16 dom 18:43
Nenhum comentário:
Postar um comentário