In Haskell, una delle cose che ritengo sia piuttosto bella è il suo uso delle Monade come un'astrazione su azioni efficaci. Crea un modo davvero elegante per esprimere il codice imperativo, mentre consente anche che cose potenti accadano con garanzie sulla correttezza.IO Monade in lingue dinamicamente tipizzate
La monade IO non sembra essere specifica per le lingue fortemente tipizzate. In particolare, mi sembra che non sarebbe difficile o rivoluzionario implementare la monade IO in un linguaggio tipizzato dinamicamente. Sarebbe quindi solo necessario limitare la lingua in modo tale che tutte le azioni IO invece producano semplicemente azioni nella monade IO.
Detto questo, non ho visto nessun linguaggio (forse semplicemente non sto guardando abbastanza) che sono tipizzati dinamicamente, ma isolano gli effetti collaterali usando le monadi. C'è qualche ragione per cui questo è il caso? (o esistono?)
OK, questo ha molto senso. Un sistema IO con tag runtime in un linguaggio dinamico è ciò a cui stavo pensando (anche se pensavo che avrebbe usato i combinatori monad). Non mi rendevo conto che c'erano altri tipi di combinatori per le azioni di I/O digitate, hai qualche esempio? – Mystor
Bene, Clean utilizza un sistema basato su tipi di unicità per l'IO, ad esempio. Penso che probabilmente scoprirai che qualsiasi astrazione che funziona per l'I/O digitato equivale approssimativamente ai combinatori monadici. Il mio vero punto è che quei combinatori non sono la parte speciale del tipo IO. Sono solo degli operatori idraulici convenienti e si tratta di qualcosa che può essere definito polimorficamente nel sistema di tipi di Haskell. – Carl