Sono sicuramente un principiante Haskell. Per esplorare la pigrizia, ho creato una funzione in ghci che restituisce il secondo argomento:Perché una semplice funzione di Haskell rifiuta un argomento frazionario espresso come rapporto?
Prelude> let latter x y = y
latter :: t -> t1 -> t1
Sono in grado di chiamare con argomenti di tipo Char
, [Char]
, Num
, Floating
e Fractional
(espressi come decimali):
Prelude> latter 'x' 'y'
'y'
it :: Char
Prelude> latter "foo" "bar"
"bar"
it :: [Char]
Prelude> latter 1 2
2
it :: Num t1 => t1
Prelude> latter pi pi
3.141592653589793
it :: Floating t1 => t1
Prelude> latter 0.5 0.7
0.7
it :: Fractional t1 => t1
Perché ottengo un errore di orribile (e cosa significa) quando cerco di applicare latter
ad un Fractional
espresso come rapporto:
Prelude> 1/2
0.5
it :: Fractional a => a
Prelude> latter 1/2 1/2
<interactive>:62:1:
Could not deduce (Num (a0 -> t1 -> t1))
arising from the ambiguity check for ‘it’
from the context (Num (a -> t1 -> t1),
Num a,
Fractional (t1 -> t1))
bound by the inferred type for ‘it’:
(Num (a -> t1 -> t1), Num a, Fractional (t1 -> t1)) => t1 -> t1
at <interactive>:62:1-14
The type variable ‘a0’ is ambiguous
When checking that ‘it’
has the inferred type ‘forall t1 a.
(Num (a -> t1 -> t1), Num a, Fractional (t1 -> t1)) =>
t1 -> t1’
Probable cause: the inferred type is ambiguous
Hai bisogno di parenti: 'ultimi (1/2) (1/2)'. – Jubobs
D'oh! Grazie. –