Il codice è moralmente corretto ma manca in alcuni punti. La roba condizionale in realtà va bene, la parte che ti fa inciampare è
- Indica che vuoi una tupla
- Costruire un valore
Maybe
Prima di tutto, il tipo Maybe Float Float
è mal formato, Maybe
prende un argomento di tipo non due, penso tu intenda Maybe (Float, Float)
che dovrebbe essere letto come "A Maybe
di una coppia dei float ". Quindi per costruire una singola espressione di tipo (Float, Float)
usiamo (-, -)
. Quindi invece di a b
che in realtà significa " a
applicato come funzione a b
" avremmo (a, b)
, una coppia di a
e b
. Ultimo ma non meno importante, vogliamo costruire un Maybe
alla fine, quindi dobbiamo avvolgere esplicitamente l'intera tupla nel costruttore di Just
lasciandoci con Just (a, b)
.
test :: Float -> Float -> Maybe (Float, Float)
test a b
| a>0 && b>0 = Just (a, b)
| otherwise = Nothing