domingo, 16 de dezembro de 2018

Uma Breve Correção [Neelakantan Krishnaswami]

Uma Breve Correção

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 ou maybe, 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 :)

Created: 2018-12-16 dom 18:43

Validate

Nenhum comentário:

Postar um comentário

Entendendo o Combinador Y [hishamhm]

Entendendo, Finalmente, o Combinador Y - Uma Abordagem de uma Perspectiva Amigável a Programadores Entendendo, Finalmente, o...