( ). , , , . :
add x y = x + y
addInt :: Int -> Int -> Int
addInt x y = x + y
*Main> :t add
add :: Num a => a -> a -> a
*Main> add 2 3
5
*Main> add 2.1 3.1
5.2
*Main> :t addInt
addInt :: Int -> Int -> Int
*Main> addInt 2 3
5
*Main> addInt 2.1 3.1 -- addInt will not accept non-Ints.
<interactive>:23:8:
No instance for (Fractional Int) arising from the literal ‘2.1’
In the first argument of ‘addInt’, namely ‘2.1’
In the expression: addInt 2.1 3.1
In an equation for ‘it’: it = addInt 2.1 3.1
, , ( ) , , , , .
, . , :
readAndShow s = show (read s)
- ...
Foo.hs:6:17:
No instance for (Show a0) arising from a use of ‘show’
The type variable ‘a0’ is ambiguous
Note: there are several potential instances:
instance (GHC.Arr.Ix a, Show a, Show b) => Show (GHC.Arr.Array a b)
-- Defined in ‘GHC.Arr’
instance Show a => Show (Maybe a) -- Defined in ‘GHC.Show’
instance (Integral a, Show a) => Show (GHC.Real.Ratio a)
-- Defined in ‘GHC.Real’
...plus 26 others
In the expression: show (read s)
In an equation for ‘readAndShow’: readAndShow s = show (read s)
Foo.hs:6:23:
No instance for (Read a0) arising from a use of ‘read’
The type variable ‘a0’ is ambiguous
Note: there are several potential instances:
instance (GHC.Arr.Ix a, Read a, Read b) => Read (GHC.Arr.Array a b)
-- Defined in ‘GHC.Read’
instance Read a => Read (Maybe a) -- Defined in ‘GHC.Read’
instance (Integral a, Read a) => Read (GHC.Real.Ratio a)
-- Defined in ‘GHC.Read’
...plus 25 others
In the first argument of ‘show’, namely ‘(read s)’
In the expression: show (read s)
In an equation for ‘readAndShow’: readAndShow s = show (read s)
Failed, modules loaded: none.
... . read a String , show . , read s, , String as. ...
readAndShowAsInt s = show (read s :: Int)
*Main> readAndShowAsInt "2"
"2"
... - :
readAndAdd :: String -> Int -> Int
readAndAdd s y = read s + y
*Main> readAndAdd "2" 3
5