id,summary,reporter,owner,description,type,status,priority,milestone,component,version,resolution,keywords,cc,os,architecture,failure,testcase,blockedby,blocking,related,differential,wikipage
963,monadic Num instance not found in ghci,rwxr-xr-x@…,,"Here's my code (fun.hs):
{{{
{-# OPTIONS_GHC -fglasgow-exts -fallow-undecidable-instances #-}
import Control.Monad.Reader
instance Eq (a -> b) where
_ == _ = error ""whoops""
instance Show (a -> b) where
show = const """"
instance (Num a, Monad m, Eq (m a), Show (m a)) => Num (m a) where
fromInteger = return . fromInteger
abs = liftM abs
signum = liftM signum
(+) = liftM2 (+)
(*) = liftM2 (*)
(-) = liftM2 (-)
instance (Fractional a, Monad m, Num (m a)) => Fractional (m a) where
fromRational = return . fromRational
(/) = liftM2 (/)
instance (Floating a, Monad m, Fractional (m a)) => Floating (m a) where
pi = return pi
exp = liftM exp
log = liftM log
sin = liftM sin
cos = liftM cos
tan = liftM tan
sinh = liftM sinh
cosh = liftM cosh
tanh = liftM tanh
asin = liftM sin
acos = liftM cos
atan = liftM tan
asinh = liftM sinh
acosh = liftM cosh
atanh = liftM tanh
}}}
Test session:
{{{
$ ghci fun.hs
___ ___ _
/ _ \ /\ /\/ __(_)
/ /_\// /_/ / / | | GHC Interactive, version 6.6, for Haskell 98.
/ /_\\/ __ / /___| | http://www.haskell.org/ghc/
\____/\/ /_/\____/|_| Type :? for help.
Loading package base ... linking ... done.
[1 of 1] Compiling Main ( fun.hs, interpreted )
Ok, modules loaded: Main.
*Main> 1 2
:1:0:
No instance for (Num (t1 -> t))
arising from the literal `1' at :1:0-2
Possible fix: add an instance declaration for (Num (t1 -> t))
In the expression: 1 2
In the definition of `it': it = 1 2
}}}
Expected result:
{{{
Loading package mtl-1.0 ... linking ... done.
1
}}}
This used to work in ghci-6.4. What's also weird is that manually lifting
one number seems to help:
{{{
*Main> (1 + 2) undefined
:1:1:
No instance for (Num (a -> t))
arising from the literal `1' at :1:1
Possible fix: add an instance declaration for (Num (a -> t))
In the first argument of `(+)', namely `1'
In the expression: (1 + 2) undefined
In the definition of `it': it = (1 + 2) undefined
*Main> (1 + const 2) undefined
3
}}}",bug,closed,normal,,GHCi,6.6,fixed,,,Linux,x86,None/Unknown,tc217,,,,,