2012-09-22 18 views

Respuesta

19

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.

+3

Curiosidad: ¿de qué sirve tener las dos definiciones? –

+1

@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. –

+1

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 –

2

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.

Cuestiones relacionadas