2014-12-27 8 views
14

Ho 2 funzioni in un file normale con nient'altro.Quirkiness in Haskell 7.8.3

--This is FN1 
helper :: Int -> Double -> Double 
helper n x = (nu/d) 
    where 
    nu = x^n 
    d = product [1 .. n] 

--This is FN2 
filterOdd :: [a] -> [a] 
filterOdd ls = fi ls [1..] 
    where 
    fi [] _ = [] 
    fi (v:vs) (i:ix) = if even i 
         then v:(fi vs ix) 
         else fi vs ix 

Sto usando GHC 7.8.3

So che c'è un errore di tipo in FN1. Ne sono consapevole. Quando FN1 viene commentato ed eseguito, GHCi non genera errori. Ma quando FN1 non è commentato ed esegui GHCi mostra l'errore ovvio in FN1, ma anche un errore di 2 pagine lungo per FN2.

Non capisco. Non esiste una relazione esplicita tra FN1 e FN2. Niente in FN1 chiama FN2 e viceversa. Ma perché GHCi mostra errori per FN2 quando FN1 non è commentato?

L'errore esatto è abbastanza lungo, che ho deciso di metterlo sul lpaste

Qualcuno potrebbe dirmi, che cosa sta succedendo? Molto probabilmente, ho frainteso qualcosa.

+0

Posso osservare lo stesso comportamento (nella stessa versione di GHC), ma non riesco a spiegarlo. Sembra piuttosto strano. Non vedo l'ora di una risposta. – Jubobs

+0

In "7.6.3' non si verifica tale errore ... –

+0

[ecco la traccia] (https://gist.github.com/anonymous/23136f5a74d2beb33cb6) dal typechecker. GHC versione 7.8.3 –

risposta

8

Questa era biglietto GHC Trac #9323, che ha dato l'esempio

module Foo where 

broken :: [Int] 
broken =() 

ambiguous :: a -> String 
ambiguous _ = show 0 

"Thomie" ha chiuso il biglietto dopo Simon Peyton Jones ha lasciato this comment nel mese di luglio:

Tutto va bene nella testa. (Non so quale delle molte modifiche tra 7.8 e HEAD è responsabile.)

Aggiungerò un test di regressione. Ma non propongo di correggere 7.8.

Simon

Nota: una convenzione particolare, ma ormai radicata negli ambienti di sviluppo GHC è quello di fare riferimento alla git master ramo ufficiale come HEAD.

+0

Per quanto riguarda la nota alla fine, è possibile fare riferimento al tip o * head * di un ramo Git, che è distinto dal riferimento simbolico 'HEAD'; forse hanno sbagliato il caso (scrivono "TESTA" ma intendono "testa"). – Jubobs