相关疑难解决方法(0)

为什么"(`减法`)1 2"失败了?

如果反向标记将前缀函数更改为中缀,并且括号将中缀函数更改为前缀,则:

从语法上讲,为什么会(`subtract`) 1 2失败?

haskell

9
推荐指数
2
解决办法
241
查看次数

如何找出运算符“ +”的类型?

在GHCi版本8.6.3(https://repl.it/languages/haskell)中,我想知道如何找出运算符“ +”的类型。我想看看它的类型是num a, b,c => a -> b -> c还是num a, b,c => (a,b) -> c

但是我找不到它的类型。它还以未知方式影响下一个表达式。为什么我失败了,我该怎么办?

   :type +
   :type not
<interactive>:1:1: error: parse error on input ‘+’
   :type not
not :: Bool -> Bool
=> "12"
Run Code Online (Sandbox Code Playgroud)

haskell

4
推荐指数
1
解决办法
97
查看次数

为什么(。)称为中缀。而不是`(。)`

我了解到可以通过两种方式调用函数:前缀和中缀。例如,说我创建了这个函数:

example :: [Char] -> [Char] -> [Char]
example x y = x ++ " " ++ y
Run Code Online (Sandbox Code Playgroud)

我可以这样称呼它为前缀:

example "Hello" "World"
Run Code Online (Sandbox Code Playgroud)

或像这样的中缀:

"Hello" `example` "World"
Run Code Online (Sandbox Code Playgroud)

两者都会导致代表字符串的字符列表"Hello World"

但是,我现在正在学习函数组成,并且遇到了如下定义的函数:

(.) :: (b -> c) -> (a -> b) -> a -> c
Run Code Online (Sandbox Code Playgroud)

所以,说我想乘以三来求和。我会像这样写前缀调用:

negateComposedWithMultByThree = (.) negate (*3) 
Run Code Online (Sandbox Code Playgroud)

和infix调用类似:

negateComposedWithMultByThree = negate `(.)` (*3)
Run Code Online (Sandbox Code Playgroud)

但是,虽然前缀调用可以编译,但infix调用却不会,而是显示错误消息:

错误:解析输入'('

看来,为了调用compose infix,我需要省略方括号并这样称呼它:

negateComposedWithMultByThree = negate . (*3)
Run Code Online (Sandbox Code Playgroud)

谁能对此有所启示?为什么"Hello" `example` "World"同时negate `(.)` (*3)不?

另外,如果我尝试使用这样的签名来实现自己的功能:

(,) :: Int -> Int …
Run Code Online (Sandbox Code Playgroud)

haskell

2
推荐指数
1
解决办法
137
查看次数

标签 统计

haskell ×3