## #963 closed bug (fixed)

# monadic Num instance not found in ghci

Reported by: | Owned by: | ||
---|---|---|---|

Priority: | normal | Milestone: | |

Component: | GHCi | Version: | 6.6 |

Keywords: | Cc: | ||

Operating System: | Linux | Architecture: | x86 |

Type of failure: | None/Unknown | Test Case: | tc217 |

Blocked By: | Blocking: | ||

Related Tickets: | Differential Rev(s): | ||

Wiki Page: |

### Description

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 "<fun>" 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 <interactive>:1:0: No instance for (Num (t1 -> t)) arising from the literal `1' at <interactive>: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 <interactive>:1:1: No instance for (Num (a -> t)) arising from the literal `1' at <interactive>: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

### Change History (2)

### comment:1 Changed 10 years ago by

Resolution: | → fixed |
---|---|

Status: | new → closed |

Test Case: | → tc217 |

**Note:**See TracTickets for help on using tickets.

This bug is the same as #179.

I've finally fixed it. The patch should work fine on the 6.6 branch.

Simon