Erreur «Impossible de charger l'interface» lors du chargement des modules compilés dans ghci

Bonjour Haskell communauté,

Je suis nouveau sur Haskell et a couru dans un problème, quand j'ai essayé de structurer mon premier gros projet.

Voici l'exemple minimal du problème (je suis en utilisant cabale de construire).

C'est la structure de répertoire d'un module simple:

FooMod1
|- FooMod1.cabal
|- Setup.hs
|- src
  |- FooMod1.hs
  |- FooMod1
    |- C1.hs
    |- T1.hs

La source pour FooMod1.hs:

module FooMod1 (
    C1(..) ,
    T1(..) ,
) where 

import FooMod1.C1
import FooMod1.T1

La source pour la C1.hs:

module FooMod1.C1 (
    C1(..)
) where

class C1 a where
    c1FooFun :: a -> IO ()

La source pour T1.hs:

module FooMod1.T1 (
    T1(..)
) where

import FooMod1.C1

data T1 = T1 deriving(Show)

instance C1 T1 where
    c1FooFun T1 = putStrLn "c1FooFun from T1"

La source de la cabale fichier:

Name:                      FooMod1
Version:                   0.0.1
Cabal-version:             >=1.10
Build-type:                Simple

library 
  build-depends:           base >= 4 && < 5
  if impl(ghc >= 7.0.0)
     default-language:     Haskell2010
  ghc-options:             -Wall
  exposed-modules:         FooMod1

  ghc-options:             -Wall -rtsopts
  hs-source-dirs:          src, src/FooMod1
  default-language:        Haskell2010

et la Configuration.hs:

module Main where

import Distribution.Simple

main = defaultMain

Je peux faire

cabal configure
cabal build
cabal install

sans aucun problème. Quand j'ai commencer à ghci et

import FooMod1

il charge le module et je peux voir les données des constructeurs.
Mais quand j'essaie d'obtenir le type d'une fonction par exemple

:t c1FooFun

ou de construction d'une valeur-je obtenir:

Failed to load interface for `FooMod1.C1'
There are files missing in the `FooMod1-0.0.1' package,
try running 'ghc-pkg check'.
Use -v to see a list of the files searched for.
In the expression: c1FooFun

'ghc-pkg cochez la case' ne révèle rien.

Ce qui me manque? J'ai regardé dans le Haskell 2010 Standard (http://www.haskell.org/onlinereport/haskell2010/haskellch5.html) et je ne trouve pas l'erreur. Donc mes questions sont les

1) Pourquoi j'obtiens cette erreur?

2) Est la structuration hiérarchique des modules comme des bonnes pratiques? (à supposer nettement plus gros programmes)

Merci beaucoup d'avance!

Jules

source d'informationauteur jules