Haskell gardes sur les lambda fonctions?
Est-il possible d'avoir des gardes sur les lambda fonctions?
Par exemple:
\k
| k < 0 -> "negative"
| k == 0 -> "zero"
| otherwise -> "positive"
Vous devez vous connecter pour publier un commentaire.
Nope. Le plus proche de la traduction directe est quelque chose un peu comme
_
sur()
😀()
est court et probablement le moins déroutant.select
la fonction haskell.org/haskellwiki/Case#Using_functionsDe GHC 7.6.1 il y a une extension appelée
MultiWayIf
qui vous permet d'écrire le suivant:Qui, à tout le moins est plus agréable à regarder que l'alternative à l'aide de
case
.Pour "pattern-matching", il y a une relative extension appelée
LambdaCase
:Ces extensions ne font pas partie de la norme Haskell, cependant, et doit être activée explicitement par l'intermédiaire d'un
{ -# LANGUAGE LambdaCase #- }
ou{ -# LANGUAGE MultiWayIf #- }
pragma en haut du fichier, ou par compilation avec le drapeau-XLambdaCase
ou-XMultiWayIf
.Je tiens à garder les lambdas court et doux afin de ne pas rompre le lecteur de flux visuel. Pour une fonction dont la définition est syntaxiquement encombrants assez pour justifier de gardes, pourquoi ne pas le coller dans un
where
clause?Un élégant et concis façon de le faire avec LambdaCase:
ou
Cas lorsque je l'ai utilisé, pour attraper un EOF erreur:
Encore une autre façon consiste à utiliser une combinaison de la
LambdaCase
etViewPatterns
GHC extensions:{ -# LANGUAGE LambdaCase, ViewPatterns #- }
Ceci vous évite d'avoir à indiquer le nom d'une variable intermédiaire.