haskell - tabla - ¿Cómo evitar variables superfluas en notación?
tabla inicial simplex (2)
(Supongo que su objetivo es limitar el alcance del uid
, no solo estar libre de puntos por sí mismo)
En un caso simple como este, la respuesta de @ pdw es probablemente el camino a seguir. Los operadores <$>
y <*>
de Control.Applicative
son particularmente útiles aquí.
foo = do
are_same <- (==) <$> doThis <*> doThat
En situaciones un poco más complicadas, podría usar una función anidada:
complicatedEq :: This -> That -> IO Bool
main = do
are_same <- do
this <- doThis
that <- doThatBasedOn this
complicatedEq this that
... rest ...
Cualquier cosa significativamente larga probablemente merece ser su propia función.
Decir en un bloque de notación de Haskell, deseo tener una variable is_root
indique si soy root:
import System.Posix.User
main = do
uid <- getRealUserID
is_root <- return $ uid == 0
Esa variable uid
molesta solo se usa en ese lugar. Ojalá pudiera escribir esto:
main = do
is_root <- getRealUserID == 0
Pero claro que eso no compilará.
¿Cómo puedo deshacerme de variables superfluas como uid
? Aquí está lo mejor que he encontrado:
import System.Posix.User
main = do
is_root <- getRealUserID >>= return . ((==) 0)
Blech! ¿Hay alguna manera mejor?
Una forma es
fmap (== 0) getRealUserID