Tôi đang học haskell và hơi bối rối về cách mà toán tử ứng dụng hàm $ curry's.
Theo GHC loại $ là
*Main>:t ($)
($) :: (a->b) -> a -> b
Nhưng tôi có thể gõ đoạn mã sau
*Main>map ($ 2) [(*2), (+2), (/2)]
[4.0,4.0,1.0]
Theo chữ ký của $ mặc dù tôi sẽ giả định tôi sẽ cần phải sử dụng lật bởi vì tham số đầu tiên của $ là (a-> b).
Ví dụ, tôi không thể làm như sau
curry_test :: Integer -> String -> String
curry_test x y = (show x) ++ " " ++ y
*Main> let x = curry_test "123"
Couldn't match expected type `Integer' with actual type `[Char]'
In the first argument of `curry_test', namely `"123"'
In the expression: curry_test "123"
In an equation for `x': x = curry_test "123"
Nhưng tôi có thể làm
let x = curry_test 2
gợi ý: '(*) :: Num a => a -> a -> a' – DiegoNolan