Esta es una propiedad agradable que Python tiene porque sus "diccionarios hasta el fondo", por así decirlo. Haskell le permite asignar alias a los módulos, pero no hay forma de alias de las funciones de la declaración import
(hasta donde yo sé). Lo mejor que podrías hacer es
import qualified Fruit as F (apple)
banana = F.apple
se puede poner esto en su propio módulo y exportar los valores que desee, ocultando los detalles de todo esto, pero que parece como un montón de trabajo para algo tan sencillo .
Como se comenta a continuación por hammar, la restricción de monomorfismo podría causar problemas con el tipo inferido de banana
. Para estar seguro, usted debe anotar ya sea banana
con su tipo deseado (probablemente la de apple
), o desactivar la restricción monomorphism como
{-# LANGUAGE NoMonomorphismRestriction #-}
import qualified Fruit as F (apple)
banana = F.apple
De lo contrario, el tipo inferido de banana
podría ser menos polimórficos que se desee.
La restricción de monomorfismo intenta asignar una instancia concreta de una clase de tipo para cada función de nivel superior (esto se hace por motivos de rendimiento). Considere,
example = return()
Esta función debe tener el tipo Monad m => m()
, pero debido a la restricción monomorphism, no hay suficiente información sobre qué instancia Mónada se debe utilizar, para que pueda obtener el siguiente mensaje
Ambiguous type variable `m0' in the constraint:
(Monad m0) arising from a use of `return'
Possible cause: the monomorphism restriction applied to the following:
example :: m0() (bound at Test.hs:44:1)
Probable fix: give these definition(s) an explicit type signature
or use -XNoMonomorphismRestriction
In the expression: return()
In an equation for `example': example = return()
Ahora , si se proporciona suficiente información para GHC para inferir qué instancia de Monad que está utilizando, tales como
example = return()
main :: IO()
main = example
continuación GHC dará el Follo ala tipo
*Main> :t example
example :: IO()
ya que dijo que example
que tendrá el mismo tipo que main
Para su información, estoy en particular, en este momento tratando de importar Data.List.genericLength como la longitud de conseguir deshacerse de Int sin refactorización. –
Me pregunto qué fácil o difícil sería parchar GHC para aceptar la siguiente sintaxis: 'import Fruit (apple as banana)'. – Wizek