haskell-mafia / mafia

Provides protection against cabal swindling, robbing, injuring or sabotaging people with chopsticks.
http://haskell-mafia.github.io/mafia/
BSD 3-Clause "New" or "Revised" License
135 stars 19 forks source link

"mafia ghci" doesn't understand flags in cabal file #172

Open erikd-ambiata opened 7 years ago

erikd-ambiata commented 7 years ago

Messing with the tls package using mafia ghci Network/TLS/Backend.hs I get:

> mafia ghci Network/TLS/Backend.hs 
GHCi, version 8.0.2: http://www.haskell.org/ghc/  :? for help
Loaded GHCi configuration from /home/erikd/.ghci
[1 of 1] Compiling Network.TLS.Backend ( Network/TLS/Backend.hs, interpreted )

Network/TLS/Backend.hs:62:13: error:
    Not in scope: type constructor or class ‘Network.Socket’
    No module named ‘Network’ is imported.

Network/TLS/Backend.hs:64:12: error:
    Not in scope: ‘Network.recv’
    No module named ‘Network’ is imported.
Failed, modules loaded: none.

Problem is that the include of Network.Socket is guarded:

#ifdef INCLUDE_NETWORK
import Control.Monad
import qualified Network.Socket as Network (Socket, close)
import qualified Network.Socket.ByteString as Network
#endif

with a flag set in the cabal file:

Flag network
  Description:       Use the base network library
  Default:           True

Mafia can build this just fine, but its a pity I can't just load it into GHCi.

amosr commented 7 years ago

out of curiosity, does mafia repl work? might suffice as a workaround for now

erikd-ambiata commented 7 years ago

Indeed it does. Curious!

markhibberd commented 7 years ago

That is the explicit difference between repl and ghci. repl uses cabal and related info, ghci is for using ghc directly and explicitly ignoring anything to do with cabal.

erikd-ambiata commented 7 years ago

explicitly ignoring anything to do with cabal

It doesn't ignore everything to do with cabal. For instance, it uses the local cabal sandbox. The ghci command only exists to work around what I consider a bug in cabal's repl command, ie that you can't tell cabal repl to load a file that is not mentioned in the cabal file. If that bug was fixed, I think the desired behavior of repl and ghci could actually be the same.

markhibberd commented 7 years ago

Ok, that is not what I use it for, repl is project based, ghci is file based, this distinction has always existed and wasn't to work around anything. They are very different things for very different purposes for me.

erikd-ambiata commented 7 years ago

My main use of mafia ghci is try out experimental code that is related to the current project, but may or may not end up in the current project.

If ghci was "fixed" to correctly handle flags defined in the local cabal file, would it break anything for you?