Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

GHC 7.0.4 seems to have forgotten how to apply functors

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 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)
like image 314
Vanson Samuel Avatar asked Oct 07 '11 12:10

Vanson Samuel


1 Answers

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.

like image 126
Adam Wagner Avatar answered Sep 17 '22 22:09

Adam Wagner