ghci のロードって

This entry was posted by on Tuesday, 22 May, 2007

http://madscientist.jp/~ikegami/diary/20070522.html#p01 そういえば、ライブラリを作っていてインストールしたものがロードできなくて悩んだことがあります。

たとえば、こんな感じね。

% ls Data LICENSE Text dist example test HaskellNet Setup.hs _darcs doc haskellnet.cabal % ghci -package HaskellNet ___ ___ _ / _ \ /\ /\/ __(_) / /_\// /_/ / / | | GHC Interactive, version 6.6, for Haskell 98. / /_\\/ __ / /___| | http://www.haskell.org/ghc/ \____/\/ /_/\____/|_| Type :? for help. Loading package base … linking … done. Loading package haskell98 … linking … done. Loading package parsec-2.0 … linking … done. Loading package html-1.0 … linking … done. Loading package network-2.0 … linking … done. Loading package QuickCheck-1.0 … linking … done. Loading package HUnit-1.1 … linking … done. Loading package Crypto-4.0.3 … linking … done. Loading package mtl-1.0 … linking … done. Loading package time-1.0 … linking … done. Loading package HaXml-1.13.2 … linking … done. Loading package HaskellNet-0.2 … linking … done. Prelude> :m HaskellNet.SMTP module main:HaskellNet.SMTP is not loaded Prelude> :l HaskellNet.SMTP [1 of 3] Compiling HaskellNet.Auth ( HaskellNet/Auth.hs, interpreted ) [2 of 3] Compiling HaskellNet.BSStream ( HaskellNet/BSStream.hs, interpreted ) [3 of 3] Compiling HaskellNet.SMTP ( HaskellNet/SMTP.hs, interpreted ) Ok, modules loaded: HaskellNet.SMTP, HaskellNet.BSStream, HaskellNet.Auth.

インストールしたライブラリよりも、ローカルなファイルの方が優先されるというルールなんでしょうね。でもエラーメッセージがさすがに不親切すぎ。はじめてあの「not loaded」ってのを見たときには何が起きたかわからず、かなりビビりました。

(どうでもいい追記)

あれっ、なんで QuickCheck とか HUnit とかをロードしているんだろ?

Crypto が依存しているらしい。おいおい、ライブラリのビルドには必要ないんじゃないのそれ。……build-depends はライブラリとかではなくパッケージのプロパティだから、ライブラリといわず実行ファイルといわず、同じ依存関係になっちゃうのか。うわ、気付いていなかった。なにそれ。

Comments are closed.