Я пытаюсь скомпилировать простой фрагмент кода.
main = (putStrLn . show) (Right 3.423)
Компиляция приводит к следующей ошибке:
No instance for (Show a0) arising from a use of `show'
The type variable `a0' is ambiguous
Possible fix: add a type signature that fixes these type variable(s)
Note: there are several potential instances:
instance Show Double -- Defined in `GHC.Float'
instance Show Float -- Defined in `GHC.Float'
instance (Integral a, Show a) => Show (GHC.Real.Ratio a)
-- Defined in `GHC.Real'
...plus 42 others
In the second argument of `(.)', namely `show'
In the expression: putStrLn . show
In the expression: (putStrLn . show) (Right 3.423)
Когда я выполняю тот же фрагмент из ghci, все работает, как и ожидалось.
Prelude> let main = (putStrLn . show) (Right 3.423)
Prelude> main
Right 3.423
Так что вопрос в том, что происходит?