2014-10-02 11 views
5

È SF già definito ovunque, o almeno ha un nome?Un nome per un prodotto di `Const` e un functor?

data SF a f x = SF a (f x) 

instance Functor f => Functor (SF a f) where 
    fmap g (SF a fx) = SF a (fmap g fx) 
+0

Sembra che tu stia dichiarando un funtore che contiene un altro funtore. –

+0

AFAIK non ce n'è uno già fuori, ma questo non significa che non esista nell'angolo di un pacchetto casuale che non ho mai usato. – bheklilr

+0

@ Code-Apprentice, sto definendo un trasformatore functor. 'SF a f' è lo stesso di functor' f', ma ha un valore addizionale di tipo 'a' collegato ad esso. – Artyom

risposta

4

tuo functor sembra

type SF a f = (,) a :. f 

usando la notazione functor-combo.

(in qualche modo preferisco guardare utilizzando la composizione, invece di usare il prodotto e Const.)

+2

Un nome più mainstream per il tuo ': .' è' Componi' dal pacchetto 'transformer'. –

1

Si può solo definire prodotti functor

data (f :* g) a = P (f a) (g a) deriving Functor 

e poi scrivere direttamente

type SF a f = Const a :* f 
Problemi correlati