Encontré la definición de y en Internet, pero no pude encontrar la implementación real de y. Intenté buscar algún tipo de archivo preludio Haskell en mi computadora, pero no devolvió nada que pudiera abrirse en un editor de texto.¿Cómo puedo ver el código de implementación para "y"?
Respuesta
Puede utilizar Hoogle para buscar funciones Haskell, así:
http://www.haskell.org/hoogle/?hoogle=and
Los enlaces de las funciones que llevan al módulo de biblioteca en la que se define la función, y en este caso el enlace para and
toma nosotros aquí:
http://hackage.haskell.org/packages/archive/base/latest/doc/html/Prelude.html#v:and
a continuación, haga clic en el enlace Source
a la derecha del nombre de la función y se toma s usted a la fuente de esa función. Para el caso de and
se vincula a nosotros aquí:
http://hackage.haskell.org/packages/archive/base/latest/doc/html/src/GHC-List.html#and
and :: [Bool] -> Bool
or :: [Bool] -> Bool
#ifdef USE_REPORT_PRELUDE
and = foldr (&&) True
or = foldr (||) False
#else
and [] = True
and (x:xs) = x && and xs
or [] = False
or (x:xs) = x || or xs
#endif
Vas a ver que and
tiene en realidad dos definiciones. Una es la definición del preludio estándar, que solo está habilitada si compila con el indicador USE_REPORT_PRELUDE
, y la otra es la definición con la que generalmente se compila el preludio, que generalmente está más optimizado.
Mira http://www.haskell.org/onlinereport/standard-prelude.html
and
se define como foldr (&&) True
.
No puede esperar encontrar el código fuente en su distribución local de Haskell, que probablemente sea la Plataforma Haskell. En su lugar, vaya a Hoogle y busque la función. Una manera, que es lo que desea, es buscar por su nombre, and
, vaya a su eglefino y luego haga clic en "origen".
En Hoogle, también puede buscar por tipo de firma, es decir. [Bool] -> Bool
que probablemente te encuentres haciendo bastante seguido.
- 1. ¿Cómo puedo ver el código para los archivos nib/xib?
- 2. ¿Cómo puedo ver el código fuente de Flash?
- 3. ¿Cómo puedo ver el desmontaje del código .NET jitted optimizado?
- 4. cómo ver el código optimizado en c
- 5. ¿Dónde puedo ver el código fuente del Sun JDK?
- 6. La implementación ampliada/encargo Ver tiros NoSuchMethod para el constructor
- 7. cómo puedo ver el plan de ejecución
- 8. ¿Cómo puedo ver el árbol de análisis sintáctico, el código intermedio, el código de optimización y el código de ensamblado durante la compilación?
- 9. ¿Cómo puedo configurar Wireshark para ver el tráfico HTTPS?
- 10. ver código nativo de Eclipse
- 11. ¿Cómo puedo ver el valor AUTO_INCREMENT para una mesa
- 12. Cómo ver el código fuente de R (pre-análisis)
- 13. Ver tanto el código de ensamblado como el código C
- 14. ¿Cómo ver el código fuente dentro de un archivo JAR?
- 15. herramienta para ver el código generado por el compilador
- 16. ¿Cómo puedo ver el SQL ActiveRecord genera?
- 17. Implementación de código Tornado
- 18. Implementación C2DM Código PHP
- 19. Implementación de biblioteca de código abierto: cómo manejar el registro?
- 20. ¿Cómo puedo ver en qué código de [Java/Scala?] El compilador Scala reescribe el código Scala original
- 21. ¿Cómo puedo ver el código fuente de JRE en Eclipse en Linux (Debian)
- 22. ¿Cómo puedo ver el código que HotSpot genera después de la optimización?
- 23. ¿Cómo puedo ver un lugar de Foursquare para check-ins?
- 24. ¿Cómo ver el código fuente de los archivos dll?
- 25. ¿Cómo puedo usar "ver" GDB?
- 26. ¿Cómo ver "código HTML generado" en Firefox?
- 27. ¿Cómo puedo ver el resultado del preprocesador de Visual C++?
- 28. ¿Cómo puedo ver un NSError?
- 29. la forma de ver el código de diseño en vb.net
- 30. Posible ver el código PHP de un sitio web?
Curiosidad: ¿de qué sirve tener las dos definiciones? –
@ChrisTaylor No tengo ni idea. Solo asumo que las personas que optimizan las bibliotecas base tenían buenas razones para escribir todos esos caracteres adicionales. –
Es curioso, hay un pragma de REGLAS después de ese código que básicamente le dice que pretenda usar la versión USE_REPORT_PRELUDE para la compilación de build/foldr –