
hi, I am trying to naively print an applicative functor using 'show' like this - show (pure (+) <*> [1, 2, 3]) I know there is something fundamentally wrong with that expression but not sure what. Can anyone please point it out. Thanks, Shishir

I modified your code little bit and I got this error. λ> :t (pure (+) <*> ([1, 2, 3] :: [Int])) (pure (+) <*> ([1, 2, 3] :: [Int])) :: [Int -> Int] λ> show (pure (+) <*> ([1, 2, 3] :: [Int])) <interactive>:13:1: No instance for (Show (Int -> Int)) arising from a use of ‘show’ In the expression: show (pure (+) <*> ([1, 2, 3] :: [Int])) In an equation for ‘it’: it = show (pure (+) <*> ([1, 2, 3] :: [Int])) You have list of functions ( [Int -> Int] ) and functions are not instance of Show class so error is pointing towards this fact. λ> :i Show class Show a where showsPrec :: Int -> a -> ShowS show :: a -> String showList :: [a] -> ShowS -- Defined in ‘GHC.Show’ instance Show a => Show [a] -- Defined in ‘GHC.Show’ instance Show Ordering -- Defined in ‘GHC.Show’ instance Show a => Show (Maybe a) -- Defined in ‘GHC.Show’ instance Show Integer -- Defined in ‘GHC.Show’ instance Show Int -- Defined in ‘GHC.Show’ instance Show Char -- Defined in ‘GHC.Show’ instance Show Bool -- Defined in ‘GHC.Show’ instance (Show a, Show b, Show c, Show d, Show e, Show f, Show g, Show h, Show i, Show j, Show k, Show l, Show m, Show n, Show o) => Show (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o) -- Defined in ‘GHC.Show’ instance (Show a, Show b, Show c, Show d, Show e, Show f, Show g, Show h, Show i, Show j, Show k, Show l, Show m, Show n) => Show (a, b, c, d, e, f, g, h, i, j, k, l, m, n) -- Defined in ‘GHC.Show’ instance (Show a, Show b, Show c, Show d, Show e, Show f, Show g, Show h, Show i, Show j, Show k, Show l, Show m) => Show (a, b, c, d, e, f, g, h, i, j, k, l, m) -- Defined in ‘GHC.Show’ instance (Show a, Show b, Show c, Show d, Show e, Show f, Show g, Show h, Show i, Show j, Show k, Show l) => Show (a, b, c, d, e, f, g, h, i, j, k, l) -- Defined in ‘GHC.Show’ instance (Show a, Show b, Show c, Show d, Show e, Show f, Show g, Show h, Show i, Show j, Show k) => Show (a, b, c, d, e, f, g, h, i, j, k) -- Defined in ‘GHC.Show’ instance (Show a, Show b, Show c, Show d, Show e, Show f, Show g, Show h, Show i, Show j) => Show (a, b, c, d, e, f, g, h, i, j) -- Defined in ‘GHC.Show’ instance (Show a, Show b, Show c, Show d, Show e, Show f, Show g, Show h, Show i) => Show (a, b, c, d, e, f, g, h, i) -- Defined in ‘GHC.Show’ instance (Show a, Show b, Show c, Show d, Show e, Show f, Show g, Show h) => Show (a, b, c, d, e, f, g, h) -- Defined in ‘GHC.Show’ instance (Show a, Show b, Show c, Show d, Show e, Show f, Show g) => Show (a, b, c, d, e, f, g) -- Defined in ‘GHC.Show’ instance (Show a, Show b, Show c, Show d, Show e, Show f) => Show (a, b, c, d, e, f) -- Defined in ‘GHC.Show’ instance (Show a, Show b, Show c, Show d, Show e) => Show (a, b, c, d, e) -- Defined in ‘GHC.Show’ instance (Show a, Show b, Show c, Show d) => Show (a, b, c, d) -- Defined in ‘GHC.Show’ instance (Show a, Show b, Show c) => Show (a, b, c) -- Defined in ‘GHC.Show’ instance (Show a, Show b) => Show (a, b) -- Defined in ‘GHC.Show’ instance Show () -- Defined in ‘GHC.Show’ instance (Show a, Show b) => Show (Either a b) -- Defined in ‘Data.Either’ instance Show a => Show (ZipList a) -- Defined in ‘Control.Applicative’ instance Show Float -- Defined in ‘GHC.Float’ instance Show Double -- Defined in ‘GHC.Float’ See the [1] [2]. [1] https://wiki.haskell.org/Show_instance_for_functions [2] http://stackoverflow.com/questions/15823732/why-is-there-no-show-instance-fo... On Wed, Apr 15, 2015 at 6:17 PM, Shishir Srivastava < shishir.srivastava@gmail.com> wrote:
hi,
I am trying to naively print an applicative functor using 'show' like this -
show (pure (+) <*> [1, 2, 3])
I know there is something fundamentally wrong with that expression but not sure what.
Can anyone please point it out.
Thanks, Shishir
_______________________________________________ Beginners mailing list Beginners@haskell.org http://mail.haskell.org/cgi-bin/mailman/listinfo/beginners

+ is a function of two arguments, and applying via (*) against a list would
apply each item as first argument of plus
Doing
pure (+) <*> [1,2,3] <*> [4,5,6]
would work.
What are you trying to achieve?
15 квіт. 2015 15:48 "Shishir Srivastava"
hi,
I am trying to naively print an applicative functor using 'show' like this -
show (pure (+) <*> [1, 2, 3])
I know there is something fundamentally wrong with that expression but not sure what.
Can anyone please point it out.
Thanks, Shishir
_______________________________________________ Beginners mailing list Beginners@haskell.org http://mail.haskell.org/cgi-bin/mailman/listinfo/beginners
participants (3)
-
Kostiantyn Rybnikov
-
mukesh tiwari
-
Shishir Srivastava