Haskell et programmation fonctionnelle, ma conviction

Pourquoi ?

Un peu de contexte

Parlons d’agile

L’exécution

IDEs

Pour vous donner envie

Types algébriques

-- Type énuméré, aka sum type 
data
Color = Red | Blue | Green
-- Structure de données, aka product type
data PixelRGB = PixelRGB Color Color Color
data PixelRGB = PixelRGB Color Color Color
| DeadPixel

Du code accessible

data User =
User { firstName :: Text
, lastName :: Text
, profilePicture :: Maybe Picture
}
-- Cachez les types concrets, nommez les concepts
-- c'est de toute façon une bonne pratique
type Picture = URL

null || undefined

  • toute expression a une valeur dans son type. Il n’existe pas de null universel. Si vous avez besoin de représenter l’absence d’une valeur utilisez Maybe (l’option en Haskell).
  • le compilateur peut vérifier pour vous qu’une fonction est totalement définie : il doit exister du code pour toutes les valeurs possibles des paramètres d’une fonction.

Tests de propriétés

test_reverse = reverse [1, 2, 3] @?= [3, 2, 1]
prop_reverse_identity :: [Int] -> Bool
prop_reverse_identity items = reverse (reverse items) == items
prop_reverse_length :: [Int] -> Bool
prop_reverse_length items = length (reverse items) == length items
prop_reverse_sum :: [Int] -> [Int] -> Bool
prop_reverse_sum xs ys = reverse (xs ++ ys) == reverse ys ++ reverse xs
behavesLike :: Eq a => (a -> b) -> (a -> b) -> a -> Bool
behavesLike f1 f2 a = f1 a == f2 a
prop_reverse_identity :: [Int] -> Bool
prop_reverse_identity = reverse . reverse `behavesLike` id
prop_reverse_length :: [Int] -> Bool
prop_reverse_length = length . reverse `behavesLike` length

Polymorphisme et programmation fonctionnelle

reverse :: [a] -> [a]

More Haskell please

Je recrute (surprise !)

Faire connaître et aimer Haskell

--

--

--

CTO @FretLinkEU, formerly @captaintrain

Love podcasts or audiobooks? Learn on the go with our new app.

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store
Frédéric Menou

Frédéric Menou

CTO @FretLinkEU, formerly @captaintrain

More from Medium

Order Book and Spread Explained

Introducing AIR, a liquidity engine for the carbon markets

How Meta’s Mismanagement Led to Its Market Downside-And How You Can Avoid That with Your Portfolio

Daily Ops — 10/04/2022 Near/Aurora and PolarFinance