Je m'auto répound pour ajouter un truc. La déclaration de fonction en Haskell fait du "pattern matching" en même temps. La plupart du temps on ne pas pas utiliser des variables "simples", mais un "pattern".
Exemple, pour faire une somme (il y a plus simple pour faire une somme, comme la fonction sum, c'est juste pour l'exemple).
mySum :: [Int] -> Int
mySum [] = 0
mySum (x:xs) = x + mySum xs Ici on commence par le type [Int] -> Int. Puis vient l'implementation. Premier cas, la somme d'une liste vide [] qui vaut 0. Second cas, la somme d'une liste qui contient un élément x et une suite de liste xs.
En utilisant la syntaxe "go", c'est à dire ou les variables ont leur type directement collé, cela donnerait un truc du genre:
mySum ([] :: [Int]) = 0
mySum (((x :: Int) : (xs :: [Int])) :: [Int]) = x + mySum xs Aucune de ces annotation de type n'est nécessaire ceci dit.
[^] # Re: Haskell super expressif ?
Posté par Guillaum (site web personnel) . En réponse au journal Comprendre Go en 5 minutes, en Haskell. Évalué à 2.
Je m'auto répound pour ajouter un truc. La déclaration de fonction en Haskell fait du "pattern matching" en même temps. La plupart du temps on ne pas pas utiliser des variables "simples", mais un "pattern".
Exemple, pour faire une somme (il y a plus simple pour faire une somme, comme la fonction
sum, c'est juste pour l'exemple).
Ici on commence par le typemySum :: [Int] -> Int
mySum [] = 0
mySum (x:xs) = x + mySum xs
[Int] -> Int. Puis vient l'implementation. Premier cas, la somme d'une liste vide[]qui vaut0. Second cas, la somme d'une liste qui contient un élémentxet une suite de listexs.En utilisant la syntaxe "go", c'est à dire ou les variables ont leur type directement collé, cela donnerait un truc du genre:
Aucune de ces annotation de type n'est nécessaire ceci dit.mySum ([] :: [Int]) = 0
mySum (((x :: Int) : (xs :: [Int])) :: [Int]) = x + mySum xs