Ho ragione di concludere che non è possibile calcolare maxBound - minBound
in Haskell per un tipo arbitrario Enum
e Bounded
? O mi manca qualche trucco/hack? Questo è quello che ho, che chiaramente non può funzionare:E 'impossibile calcolare la differenza tra il MaxBound e il MinBound di un tipo Enum?
difference :: (Enum a, Bounded a) => Int
difference = fromEnum maxBound - fromEnum minBound
Errore:
Foo.hs:37:1:
Ambiguous constraint `Enum a'
At least one of the forall'd type variables mentioned by the constraint
must be reachable from the type after the '=>'
In the type signature for `difference': difference :: (Enum a, Bounded a) => Int
Foo.hs:37:1:
Ambiguous constraint `Bounded a'
At least one of the forall'd type variables mentioned by the constraint
must be reachable from the type after the '=>'
In the type signature for `difference': difference :: (Enum a, Bounded a) => Int
capisco perché sto ricevendo questo errore-non c'è nessun termine effettivo in là con tipo a
, così non riesce a capire cosa sia a
. La domanda è se c'è un modo per aggirare questo.
ho chiesto sbagliato la prima volta intorno. Ho modificato la domanda. –
come useresti * un valore come questo? – SingleNegationElimination
@SingleNegationElimination Ho un tipo Enum/Bounded e volevo costruire un albero con tutti i possibili valori 'fromEnum' per quel tipo. È conveniente essere in grado di avere una funzione ricorsiva come 'mkTree lower upper' (che funziona comunque, non è così difficile) rompere il problema in intervalli più piccoli di ints. Ma per dare il via alle cose devi essere in grado di scrivere 'mkTree (fromEnum minBound) (fromEnum maxBound)' e ottenere i limiti del tipo giusto. – amalloy