2011-08-07 7 views
6

Algún tiempo después pedí What happens to you if you break the monad laws? me encontré con esta frase no explicada en Haskell Wiki, en una página sobre Safely running untrusted haskell code:¿Alguien sabe (o recuerda) cómo las leyes de la clase quebradas pueden causar problemas en GHC?

"la creación de instancias de clases que violan asumieron leyes (cf EvilIx)"

como un ejemplo de una explotar eso fue posible contra lambdabot.

Dado que lambdabot usa GHC, es probable que se tratara de un error (o característica) de GHC que hace suposiciones sobre las leyes de clase. ¿Alguien recuerda cuáles son? ¿Y ha sucedido esto alguna vez (o podría suceder) de forma accidental?

(Google para "haskell + Evillx" aparece sin hits).

+7

Romper la representación tipográfica es un ejemplo bastante convincente. 'instancia Typeable Int donde typeRep =" Bool "' –

+2

EvilIx: http://www.haskell.org/pipermail/haskell-cafe/2006-December/019994.html – sclv

+0

No se puede escribir la única clase que puede causar problemas ? – augustss

Respuesta

4

matrices utilizan Ix para gestionar límites. confían en que Ix hace lo que dice. Si no lo hace, se puede engañar a los mecanismos de arreglo en el acceso a posiciones de memoria que no son de ellos.

cf EvilIx: http://www.haskell.org/pipermail/haskell-cafe/2006-December/019994.html

+0

Este exploit ya no funciona en GHC 7.6, creo que fue solucionado pero no puedo encontrar una fuente. – sdcvvc

4

Si pensamos en una mónada como efectos secundarios de modelado, un tipo que dice ser una mónada pero no obedecer las leyes pueden resultar en efectos que se producen en el orden equivocado o el mal número de veces.

Un ejemplo clásico de esto es ListT, la lista de transformador de mónada. La implementación original no satisfacía las leyes de mónadas. El "ListT Done Right página wiki tiene algunos ejemplos sencillos de uso de ListT en la sección llamada " Examples". Se puede ver la diferencia entre lo que estos programas hacen cuando se ejecutan con el original aplicación que viole las leyes, y cuando se ejecutan con un reemplazo que satisface las leyes.

Cuestiones relacionadas