Que signifie l'expression suivante dans haskell?Utilisation de l'opérateur d'application de fonction dans Haskell
($ 3)
ghci indique le type suivant
($ 3) :: Num a => (a -> b) -> b.
Que signifie l'expression suivante dans haskell?Utilisation de l'opérateur d'application de fonction dans Haskell
($ 3)
ghci indique le type suivant
($ 3) :: Num a => (a -> b) -> b.
(@ x)
pour tout opérateur @
est équivalent à \a -> a @ x
; donc ($ 3)
est équivalent à \f -> f $ 3
, c'est-à-dire une fonction qui applique n'importe quelle fonction que vous transmettez à 3
. Cette syntaxe est appelée "sections".
> let f = ($ 3)
> f show
"3"
> f square
9
($ 3)
est une section, et est équivalent à \f -> f 3
, qui prend un argument de fonction et l'applique à 3.
Si nous avons considéré 3
être un entier, nous avons que le type de f
est Int -> b
(pour tout b
), donc le type de ($ 3)
serait (Int -> b) -> b
.
choses dans Haskell sont un peu plus complexe, car 3
peut être de tout type numérique, donc on n'a pas vraiment besoin f :: Int -> b
, il est suffisant f :: a -> b
où a
est un type numérique. Par exemple, nous obtenons ($ 3) :: Num a => (a -> b) -> b
.
Une autre façon de regarder est
($) :: (a -> b) -> a -> b
3 :: Num a => a
et quand vous « insérez 3 » dans le ($)
, il deviendra
($ 3) :: Num a => (a -> b) -> b.
en raison de ce que vous n'avez plus besoin de fournir l'un, mais la fonction que vous devez fournir est maintenant limitée à num, puisque le 3 peut être n'importe quel type numérique.
C'est au moins la façon dont je vois les fonctions dans Haskell, comme la substitution en algèbre.