Una semplice domanda, spero: il pacchetto binary
definisce due tipi, Get
and Put
. Il primo è essenzialmente una monade di stato, e il secondo è essenzialmente uno scrittore. Sia lo stato che lo scrittore hanno istanze ragionevoli MonadFix
, quindi mi aspetterei che lo sarebbero anche Get
e Put
.Istanza MonadFix per Put
Get
fa. Put
no. Quindi, è possibile definire un'istanza appropriata MonadFix
per Put
(in realtà per PutM
)?
Una domanda più generica è: come si verifica normalmente che un'istanza di classe tipo soddisfi effettivamente le leggi di tale classe?
Come verificare che un typeclass soddisfi le leggi: annotare l'equazione che si sta tentando di verificare, sostituire le definizioni delle funzioni e valutare. Ciò si traduce in due termini uguali? Se è così, soddisfa le leggi; altrimenti, no. –