GHC 7.0.4似乎忘记了如何应用仿函数

时间:2011-10-07 12:23:26

标签: haskell functor

在Learn You A Haskell的“Functors,Applicative Functors and Monoids”一章中,Miran做了以下事情:

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看起来像这样:

{-# 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 个答案:

答案 0 :(得分:9)

你错过了Control.Monad.Instances。不知道为什么会在那里定义,但我之前也遇到过这个问题。

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])