开发者

GHC 7.0.4 seems to have forgotten how to apply functors

开发者 https://www.devze.com 2023-04-11 05:11 出处:网络
In the \"Functors, Applicative Functors and Monoids\" chapter of Learn You A Haskell, Miran does the following:

In the "Functors, Applicative Functors and Monoids" chapter of Learn You A Haskell, Miran does the following:

ghci> (pure 3) "blah"
3

I however get this:

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"

I am not sure what happen. All the examples have worked correctly until now. I must not have imported something, but I don't know what.

Here is my version information:

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

My ~/.ghc/ghci.conf looks like this:

{-# 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)


You're missing Control.Monad.Instances. Not sure why it's defined there, but I've run into this before as well.

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

Also, after looking at the chapter in LYAH, the author does define the instance above the example, but it's not obvious this is already defined elsewhere.

Update

The error wasn't because ghci forgot how to apply functors, rather the Functor instance Functor ((->) [Char]) was not yet defined in your environment.

0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号