2011-08-27 10 views

Respuesta

19

Si bien esto es bastante viejo, publicar aquí por referencia.

Este se encuentra ahora en la biblioteca estándar bajo Data.Either desde 4,7:

https://hackage.haskell.org/package/base-4.7.0.0/docs/Data-Either.html

isLeft :: Either a b -> Bool

devueltos TRUE si el valor dado es un valor Izquierda, False en caso contrario.

isRight :: Either a b -> Bool

devueltos TRUE si el valor dado es un derecho del valor, de lo contrario.

3

No, no lo hay, que yo sepa.

Pero se puede definir estas funciones aún más fácil *:

isLeft (Left _) = True 
isLeft _  = False 

lo mismo vale para isRight, por supuesto.

EDIT: * Está bien, supongo que es discutible si eso es más fácil o no, ya que requiere más líneas de código ...

5

No, pero se puede escribir:

import Data.Either 

isLeft = null . rights . return 
isRight = null . lefts . return 
+2

probablemente porque es una manera bastante sencilla no de definir las funciones. Una definición en términos de 'cualquiera' o usando la coincidencia de patrones probablemente sería más comprensible. –

+0

Podría ser.Estoy un poco decepcionado de que haya pocas funciones disponibles para "O bien", no hay mucho con lo que trabajar. Al menos esperaría algo como 'leftMaybe :: O bien b -> Maybe a' y su contraparte. – Landei

2

Por lo Lo sé, no hay nada como esto en la biblioteca estándar. Sin embargo, puede definirlo usted mismo fácilmente.

either l _ (Left a) = l a 
either _ r (Right b) = r b 

isLeft (Left _) = True 
isLeft _  = False 

isRight (Right _) = True 
isRight _   = False 
+2

El OP quiere saber si 'isLeft' y' isRight' están en la biblioteca estándar con diferentes nombres. Él sabe que ya puede definirlos en términos de 'cualquiera', que * es * en la biblioteca estándar. – dave4420

+3

He hecho +1 en esto porque las respuestas similares no tienen -1. Él también respondió la pregunta. – alternative

13

medida que las personas han venido señalando, no existe tal función en la librería estándar, y se puede implementar su propio de varias maneras.

Sin embargo, tenga en cuenta que las preguntas de la forma "es X en la biblioteca estándar?" se responden más fácilmente por Hoogle, ya que incluso si no conoce el nombre de una función, puede buscarlo por tipo.

Hoogle también es lo suficientemente inteligente como para saber que el orden de los argumentos no importa, y también mostrará resultados cuyos tipos son similares (por ejemplo, más genérico) que el tipo que ha buscado.

En este caso, buscando Either a b -> Booldoes not yield any promising matches, por lo que es un buen indicador de que no existe en la biblioteca estándar.

+1

El consejo para Hoogle sigue siendo bueno, pero tenga en cuenta que la biblioteca estándar * does * tiene una función así; vea [la otra respuesta a esta pregunta] (http://stackoverflow.com/a/24046158/1126841). – chepner

Cuestiones relacionadas