2011-10-07 16 views
6

を適用する方法を忘れているようだ、ミランは以下のん:GHCの7.0.4あなたを学びハスケルの「ファンクタ、Applicativeのファンクタとモノイド」の章ではファンクタ

ghci> (pure 3) "blah" 
3 

しかし私はこれを取得

ghci> (pure 3) "blah" 
<interactive>:1:2: 
    No instance for (Functor ((->) [Char])) 
     arising from a use of `pure' 
    Possible fix: 
     add an instance declaration for (Functor ((->) [Char])) 
    In the expression: (pure 3) "blah" 
    In an equation for `it': it = (pure 3) "blah" 

何が起こるかわかりません。これまですべての例が正しく機能しています。私は何かを輸入してはならないだろうが、私は何がわからない。

$ ghci -v 
GHCi, version 7.0.4: http://www.haskell.org/ghc/ :? for help 
Glasgow Haskell Compiler, Version 7.0.4, for Haskell 98, stage 2 booted by GHC version 6.12.3 

私の〜/ .ghc/ghci.confは次のようになります:あなたはControl.Monad.Instancesが欠落している

{-# LANGUAGE Arrows #-} 

:set prompt "[32;1m%s[0m\n> " 

import Control.Arrow 
import Control.Monad (when, forever, forM, liftM) 
import Control.Applicative 
-- import Control.Applicative (ZipList (..), (<$>), (<*>), pure) 
import Control.Exception (IOException (..), catch) 
import qualified Data.ByteString as ByteString (pack, unpack) 
import qualified Data.ByteString.Lazy as LazyByteString (cons, cons', empty, fromChunks, pack, readFile, unpack, writeFile) 
import Data.Char (chr, ord, toUpper, toLower, isDigit) 
import Data.Function (fix, on) 
import Data.Functor 
import Data.List (find, genericLength, intercalate, intersperse, nub, tails) 
import Data.Map (Map (..)) 
import qualified Data.Map as Map (fromList, lookup) 
import Data.Monoid (mempty, mappend, mconcat) 
import Data.Tuple (fst, snd, curry, uncurry, swap) 
import System.Console.ANSI (setCursorPosition, clearScreen) 
import System.Directory (renameFile, doesFileExist) 
import System.Environment (getArgs, getProgName) 
import System.IO (IOMode (..), stdout, openFile, withFile, hGetContents, hClose, openTempFile, hPutStr, hFlush) 
import System.IO.Error (isDoesNotExistError) 
import System.Random (StdGen (..), RandomGen (..), Random (..), getStdGen, mkStdGen, newStdGen, random, randomR, randomRIO, randoms) 
import Text.Printf (PrintfArg (..), printf) 
+1

私のために... – Landei

+0

ghciのバージョンは何ですか? –

+1

"栄誉あるグラスゴーハスケルコンパイルシステム、バージョン7.0.3"を使用し、 'Control.Applicative'から' pure'をインポートしました。 –

答えて

9

は、ここに私のバージョン情報です。それがなぜそこに定義されているのか分かりませんが、これまでも私はこの問題に取り組んできました。

GHCi, version 7.0.4: http://www.haskell.org/ghc/ :? for help 
Loading package ghc-prim ... linking ... done. 
Loading package integer-gmp ... linking ... done. 
Loading package base ... linking ... done. 

Prelude Control.Applicative> (pure 3) "blah" 

<interactive>:1:2: 
    No instance for (Functor ((->) [Char])) 
     arising from a use of `pure' 
    Possible fix: 
     add an instance declaration for (Functor ((->) [Char])) 
    In the expression: (pure 3) "blah" 
    In an equation for `it': it = (pure 3) "blah" 
Prelude Control.Applicative> import Control.Monad.Instances 
Prelude Control.Applicative Control.Monad.Instances> (pure 3) "blah" 
3 

はまた、LYAHの章で見た後、著者は、たとえば上記のインスタンスを定義し、それが、これはすでに別の場所で定義されて明白ではありません。 GHCiのはのFunctorインスタンスFunctor ((->) [Char])むしろまだお使いの環境で定義されていなかった、ファンクタを適用する方法を忘れてしまったので

更新

エラーではありませんでした。

+0

はうまくいった!ありがとうございました! –

+4

実際のHaskellプログラムでは、 'Control.Monad.Instances'をインポートする必要はありません。インスタンスは' Control.Applicative'で可視でなければならないので、あなたのプログラムでも見えるはずです。しかし、ghciのインポート構文は最近(かなり)拡張されていたので、いくつかのバグがありました。私は彼らが今、ぶち壊されたと思う。 これは必須ではありませんが、良い回避策です。 –

関連する問題