• No se han encontrado resultados

Construcción Modular de Mónadas con Operaciones

N/A
N/A
Protected

Academic year: 2021

Share "Construcción Modular de Mónadas con Operaciones"

Copied!
25
0
0

Texto completo

(1)

Construcci ´on Modular de M ´onadas con

Operaciones

Mauro Jaskelioff

CIFASIS /

Depto de Cs. de la Computaci ´on FCEIA - Universidad Nacional de Rosario

(2)

En esta charla

Estructuraci ´on de programas usando m ´onadas

Transformadores para la construcci ´on modular de m ´onadas.

El problema de levantar operaciones (lifting of operations).

(3)

M ´onadas en Cs de la Computaci ´on

Las m ´onadas son una estructura algebraica que aparece en la teor´ıa de categor´ıas

Moggi se da cuenta que pueden modelar una gran cantidad de efectos computacionales.

Estado, excepciones, continuaciones, no determinismo, entrada/salida, etc.

Las usa para estructurar la sem ´antica de lenguajes de programaci ´on CBV con efectos computacionales.

Wadler las utiliza para estructurar programas.

(4)

M ´onadas en Haskell

Especificadas por una clase de tipo, param :: ∗ → ∗ class Monad m where

return :: a → m a

(>>=) ::m a → (a → m b) → m b

Algunas m ´onadas son:

Computaciones puras typeId a = a Excepciones typeEx a = Either E a Estado typeSta = S → (a, S) Continuaciones typeCna = (a → R) → R

(5)

Int ´erpretes Mon ´adicos

data Lang = Num Int | Add Lang Lang

eval ::Monad m⇒ Lang →mInt eval (Num n) =returnn

eval (Add t u) = eval t >>=λx → eval u>>=λy → return(t + u)

eval est ´a definida para cualquier m ´onada:

La m ´onada abstrae la composici ´on de efectos

(6)

Operaciones manipuladoras de efectos

Cada m ´onadaMviene equipada con operaciones que manipulan los efectos que la m ´onada modela.

Por ejemplo: CuandoM =St (estado): get:: () →MS put::S →M() CuandoM =Ex (excepciones): throw ::E →M a handle::M a → (E →Ma) →M a CuandoM =Cn(continuaciones): callcc:: ((M a → r ) →Ma) →M a abort::R →M a

(7)

Operaciones, Operaciones y Operaciones

Las que hacen el trabajo interesante son las operaciones!

eval (Div t u) = eval t>>=λx → eval u>>=λy →

if y ≡ 0 thenthrow "Division by 0"

elsereturn(x ‘div ‘ y )

eval est ´a definido para cualquier m ´onada que implemente throw.

En general, los programas mon ´adicos est ´an definidos para cualquier m ´onada que implementa las operaciones

(8)

M ´onadas con operaciones

Podemos expresar esto en Haskell con una clase de tipo

class Monad m⇒ MonadconThrowmwhere

throw::E →ma El tipo del evaluador queda:

eval :: MonadconThrow m⇒ Lang →mInt Diferentes m ´onadas pueden ser instancia de MonadconThrow .

instance MonadconThrow Ex where

(9)

¿C ´omo combinar efectos?

Supongamos que necesitamos una m ´onadaMque implemente las operaciones de estado y excepci ´on. Entonces nos podemos preguntar:

¿Podremos estructurar la m ´onadaM como una combinaci ´on de efectos mas simples?

¿Hay una sola forma de combinar estado y excepciones?

(10)

Transformadores de M ´onadas

Un transformador de m ´onada toma una m ´onada y le agrega un efecto computacional.

Permite agregar efectos incrementalmente. t :: (∗ → ∗) → (∗ → ∗)

Posee una operaci ´onlift que levanta una computaci ´on de la m ´onada base a la m ´onada transformada.

class (Monad m, Monad (t m)) ⇒ MonadT t where lift :: m a → t m a

Ejemplos:

type S m a = S → m (a, S) type X m a = m (Either E a) type C m a = (a → m R) → m R

(11)

Transformadores de M ´onadas: algunas respuestas

¿Podremos estructurar la m ´onadaM como una combinaci ´on de efectos m ´as simples?

Podemos empezar con cualquier m ´onada y agregar capas de efectos a gusto.

¿Hay una sola forma de combinar estado y excepciones?

No, transformar la m ´onada de excepciones con el

transformador de estado no es lo mismo que transformar la m ´onada de estado con el transformador de excepciones.

S → Either E (a, S) vs. S → (Either E a, s)

¿Podemos combinar cualquier m ´onada sistem ´aticamente?

Punto flojo de los transformadores. El tensor y la suma de teor´ıas algebraicas (Hyland, Plotkin & Power) explican algunos de ellos.

(12)

Operaciones de los Transformadores

Los transformadores agregan efectos, por lo que tambi ´en deben agregar operaciones.

La m ´onada que se obtiene de usar el transformador de estado debe implementarget yput.

Uno esperar´ıa que la m ´onadaS Ex implementeget,put, y tambi ´enthrow yhandle.

En este ejemplo,get yputest ´an definidas paraS m(y en particular paraS Ex).

Perothrow :: Ex ayhandle :: Ex a → (E → Ex a) → Ex a est ´an definidas paraEx a.

(13)

¿Qu ´e es levantar una operaci ´on?

Levantar una operaci ´onσde una m ´onadama trav ´es de un transformadorT es una operaci ´onσˆcuyo tipo puede ser derivado substituyendo todas las ocurrencias demen el tipo deσ porT m.

El criterio b ´asico de correci ´on es que un programa que no usa los efectos agregados por el transformador se debe comportar de la misma manera luego de la aplicaci ´on del transformador.

(14)

Levantando operaciones

¿C ´omo levantar una operaci ´on de la m ´onada subyacente a la m ´onada transformada?

Liang, Hudak y Jones (1995) propusieron

“Proveer una operaci ´on levantada para cada par operaci ´on/transformador”

Problemas:

Demasiadas definiciones!O(|t| × |op|)

La forma de levantar una operaci ´on a trav ´es de un transformadorT1no est ´a relacionada con la forma de

levantar esa operaci ´on a trav ´es deT2.

La forma en que dos operacionesσ12se levantan a trav ´es de un mnismo transformador no tiene por qu ´e ser coherente.

(15)

Nuestro enfoque

Identificar clases de operaciones y clases de transformadores para los cuales podemos levantar

(16)

Operaciones Algebraicas

Cada transformadorT provee una funci ´on polim ´orfica lift :: Monad m ⇒ m a → T m a

Si la operaci ´onσde una m ´onadaMes de la forma A → M B, se puede levantar f ´acilmente.

A σ //M B lift //T M B

Estas operaciones se denominan algebraicas ya que existe un iso entre ellas y conjuntos deAoperaciones de aridadB(que preservan la multiplicaci ´on deM)

A → M B ∼= A × (M x )B → M x

Algebraicas:

get,set,throw, yabort

No algebraicas: handleycallcc

(17)

Generalizando las operaciones algebraicas

Generalizamos las operaciones algebraicas,

generalizando la aridad de las operaciones a un functorΣ cualquiera A × (M x )B → M x → Σ (M x ) → M x Ejemplos de Σ-operaciones: get :: (S → St a) → St a Σx = (S → x ) set :: (S × St a) → St a Σx = S × x throw :: () → Ex a Σx = () handle :: Ex a → (E → Ex a) → Ex a Σx = x × (E → X ) callcc :: ((Co a → R) → Co a) → Co a Σx = (x → R) → x abort :: R → Co a Σx = R

(18)

Operaciones con buen comportamiento

Definici ´on (Σ-operaciones algebraicas para una m ´onada M)

Es una Σ-operaci ´onop :: Σ (M x ) → M x tal que

Σ (M (M x )) op(M x )  fmap join // Σ (M x ) opx  M (M x ) join //M x

Tienen una propiedad an ´aloga a las algebraicas: Σ (M x ) →alg M x ∼= Σx → M x

Esto significa que podemos levantar estas operaciones f ´acilmente!

(19)

Ejemplos de Σ-operaciones algebraicas

Todas las operaciones algebraicas son Σ-operaciones algebraicas.

Ejemplos: getyput throw abort

Sorprendentementecallcces una Σ-operaci ´on algebraica (y por lo tanto es f ´acil de levantar!)

La versi ´on decallccque aparece en la MTL se puede derivar de nuestra versi ´on:

callccMTL :: ((a →Cnb) →Cna) →Cna

callccMTL f =callcc(λk → f (λx →abort (k (return x )))) La Σ-operaci ´onhandle no es algebraica.

(20)

Transformadores Functoriales

Para poder levantar operaciones comohandle,

necesitamos mas informaci ´on acerca del tranformador. Los transformadores functoriales son una clase de transformadores de m ´onadas m ´as estructurados.

class MonadT t ⇒ FunctorialT t where tmap :: (∀a.m a → n a) → t m a → t n a Functoriales: Transformador de Estado Transformador de Excepciones No Functoriales: Transformador de Continuaciones

(21)

Levantando Σ-operaciones

Teorema

Dados

op :: Σ (M a) → M a

Transformador FunctorialT.

Existe una operaci ´onopT :: Σ (T M a) → T M aque levanta a op.

La construcci ´on deopT se puede consultar en

“Modular Monad Transformers” M. Jaskelioff, ESOP 2009.

“Monad Transformers as Monoid Transformers” M. Jaskelioff y E. Moggi, TCS 2010.

Siop es una Σ-operaci ´on algebraica, las dos maneras vistas de levantar la operaci ´on coinciden.

(22)

Abstrayendo un poco

Toda la teor´ıa funciona a un nivel m ´as general (monoides en una categor´ıa monoidal)

Las m ´onadas son una instancia de estos.

Para el ´ultimo teorema visto la categor´ıa debe ser cerrada a derecha.

Trabajo futuro: Aplicar la teor´ıa a otras estructuras.

Por ejemplo, Arrows

La abstracci ´on hizo evidente otra clase de

transformadores: Los functores monoidales, a traves de los cuales se pueden levantar operaciones m ´as generales.

(23)

Resumen

Levantamiento de operaciones en forma uniforme:

Σ-operaqci ´on algebraica Cualquier morfismo de m ´onadas Σ-operaci ´on Transformador Functorial

Monatron: Biblioteca de Transformadores de M ´onadas.

Trabajo Futuro

Encontrar otras formas de levantar operaciones. Encontrar un lifting general para teor´ıas predicativas. Extender los resultados a Arrows.

(24)

Especificaci ´on de operaci ´on levantada

Definition Σ (T M a) op T a // N a Σ (M a) op a // fmap lift OO M a lift OO

(25)

Transformador de Codensidad

K M x = ∀y .(x → M y ) → M y es un transformador. liftK::M a → K M a

Se puede definir en sistemas impredicativos como F ω (y en Haskell).

Propiedades deK:

Toda Σ-operaci ´on deMda lugar a una Σ-operaci ´on algebraica deK M

Σ (M a)−→ M aop Σ (KM a)−−→opK algK M a

from :: K M a → M a, tal quefrom ◦ liftK=id.

op = Σ (M a) Σ(lift

K)

//Σ (K M a) opK //K M a from //M a

Referencias

Documento similar

(1886-1887) encajarían bien en una antología de textos históricos. Sólo que para él la literatura es la que debe influir en la historia y no a la inversa, pues la verdad litera- ria

entorno algoritmo.

Habiendo organizado un movimiento revolucionario en Valencia a principios de 1929 y persistido en las reuniones conspirativo-constitucionalistas desde entonces —cierto que a aquellas

o Si dispone en su establecimiento de alguna silla de ruedas Jazz S50 o 708D cuyo nº de serie figura en el anexo 1 de esta nota informativa, consulte la nota de aviso de la

llo~ departamentos. El cuidado más riguroso ragirá en este órden. se puede, ~révio acuerdo y con el consentimiento de la familia, practicarle la operaci,'m en la

La conclusi´ on fue que para un n´ umero peque˜ no de par´ ametros (del orden de la decena), el m´ etodo simplex es hasta 4 veces m´ as r´ apido, obteniendo unos valores del m´

Como vimos, el proceso de democratización se define como un tipo de transición política caracterizado por una gran conflictualidad entre una lógica de apertura del sistema

El inconveniente operativo que presenta el hecho de que la distribuci´ on de probabilidad de una variable aleatoria es una funci´ on de conjunto se resuelve mediante el uso de