Posso usare forse su più input in Haskell?

3

Supponiamo che volessi testare che entrambi i miei input sono positivi. Posso fare qualcosa di simile?

test :: Float -> Float -> Maybe Float Float 
test a b
    | a>0 && b>0 = a b
    | otherwise = Nothing

Ho pensato che avrei avuto questo test di funzione che gli input per la funzione successiva erano positivi. Quindi entrano due galleggianti e ne escono due.

Che alternativa c'è?

    
posta JJ chips 14.03.2016 - 19:38
fonte

1 risposta

8

Il codice è moralmente corretto ma manca in alcuni punti. La roba condizionale in realtà va bene, la parte che ti fa inciampare è

  1. Indica che vuoi una tupla
  2. 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
    
risposta data 14.03.2016 - 20:06
fonte

Leggi altre domande sui tag