Meine Funktion funktioniert nicht. Ich habe viele verschiedene Typ-Signaturen ausprobiert. Wenn ich die Typ-Signatur entferne, funktioniert sie nicht mit einer Punktnummer als "p".Haskell Type Signature Fehler
fak :: (Num a, Ord a) => a->a
fak x
| x <= 1 = 1
| otherwise = x*fak (x-1)
ncr :: Integral a => a -> a -> a
ncr n k = (fak n) `div` (fak(n-k) * fak k)
bTable :: (Integral a, Num b) => a->b->a->a
bTable n p k = (ncr n k) * p^k * (1-p)^(n-k)
Inferred Typ ist nicht allgemein genug
*** Expression : bTable
*** Expected type : (Integral a, Num b) => a -> b -> a -> a
*** Inferred type : (Integral a, Num a) => a -> a -> a -> a
Wenn ich den Typ Signature entferne ich bekommen:
:t bTable
bTable :: Integral a => a -> a -> a -> a
Aber wenn ich ein:
bTable 50 0.8 10
ich
Unresolved overloading
*** Type : (Fractional a, Integral a) => a
*** Expression : bTable 50 0.8 10
Es sind keine automatischen Typumwandlungen in Haskell. Wenn Sie "a * b" haben, müssen "a" und "b" vom selben Typ sein. Wie erhoffen Sie sich einen "Integral" -Typ von "0.8" in einer Potenz multipliziert mit etwas anderem? –