en:
Useful notations for functions
fr: Notations utiles pour les fonctions
en: Just a reminder:
fr: Juste un mémo:
~~~
en: x :: Int ⇔ x is of type Int
en: x :: a ⇔ x can be of any type
en: x :: Num a => a ⇔ x can be any type a
en: such that a belongs to Num type class
en: f :: a -> b ⇔ f is a function from a to b
en: f :: a -> b -> c ⇔ f is a function from a to (b→c)
en: f :: (a -> b) -> c ⇔ f is a function from (a→b) to c
fr: x :: Int ⇔ x est de type Int
fr: x :: a ⇔ x peut être de n'importe quel type
fr: x :: Num a => a ⇔ x peut être de n'importe quel type a
fr: tant qu' a appartient à la classe de type Num
fr: f :: a -> b ⇔ f est une fonction qui prend un a et retourne un b
fr: f :: a -> b -> c ⇔ f est une fonction qui prend un a et retourne un (b→c)
fr: f :: (a -> b) -> c ⇔ f est une fonction qui prend un (a→b) et retourne un c
~~~
en: Remember that defining the type of a function before its declaration isn't mandatory.
en: Haskell infers the most general type for you.
en: But it is considered a good practice to do so.
fr: Rappelez-vous que définir le type d'une fonction avant sa déclaration n'est pas obligatoire.
fr: Haskell infère le type le plus général pour vous.
fr: Mais c'est considéré comme une bonne pratique.
en: _Infix notation_
fr: _Notation Infixée_
> square :: Num a => a -> a
> square x = x^2
en: Note `^` uses infix notation.
en: For each infix operator there its associated prefix notation.
en: You just have to put it inside parenthesis.
fr: Remarquez que `^` utilise une notation infixée.
fr: Pour chaque opérateur infixe il y a une notation préfixée associée.
fr: Vous devz juste l'écrire entre parenthèses.
> square' x = (^) x 2
>
> square'' x = (^2) x
en: We can remove `x` in the left and right side!
en: It's called η-reduction.
fr: Nous pouvons enlever le `x` dans les parties de gauche et de droite!
fr: On appelle cela la η-réduction
> square''' = (^2)
en: Note we can declare functions with `'` in their name.
en: Here:
fr: Rmarquez qu nous pouvons déclarer des fonctions avec `'` dans leur nom.
fr: Exemples:
> `square` ⇔ `square'` ⇔ `square''` ⇔ `square'''`
_Tests_
en: An implementation of the absolute function.
fr: Une implémentation de la fonction absolue.
> absolute :: (Ord a, Num a) => a -> a
> absolute x = if x >= 0 then x else -x
en: Note: the `if .. then .. else` Haskell notation is more like the
en: `¤?¤:¤` C operator. You cannot forget the `else`.
fr: Remarque: la notation de Haskell pour le `if .. then .. else` ressemble plus
fr: à l'opérateur `¤?¤:¤` en C. Le `else` est obligatoire.
en: Another equivalent version:
fr: Une version équivalente:
> absolute' x
> | x >= 0 = x
> | otherwise = -x
en: > Notation warning: indentation is _important_ in Haskell.
en: > Like in Python, bad indentation can break your code!
fr: > Avertissement: l'indentation est _importante_ en Haskell.
fr: > Comme en Python, une mauvaise indentation peut détruire votre code!
> main = do
> print $ square 10
> print $ square' 10
> print $ square'' 10
> print $ square''' 10
> print $ absolute 10
> print $ absolute (-10)
> print $ absolute' 10
> print $ absolute' (-10)