相关疑难解决方法(0)

哈斯克尔奇怪的表情

我想了解为什么以下是Haskell中的有效表达式:

Prelude> let e = (+) (-)
Prelude> :type e
e :: (Num (a -> a -> a), Num a) => (a -> a -> a) -> a -> a -> a
Run Code Online (Sandbox Code Playgroud)

更奇怪的是表格中的任何表达

e 1 2 3 4 ... N
Run Code Online (Sandbox Code Playgroud)

无论N都是不可理解类型的有效表达式.例如,

Prelude> :t e 1 2 3 4 5
e 1 2 3 4 5
  :: (Num ((a -> a1 -> t) -> (a -> a1 -> t) -> a -> a1 -> t),
      Num (a -> a1 -> t), …
Run Code Online (Sandbox Code Playgroud)

haskell

17
推荐指数
1
解决办法
218
查看次数

2x和2*x之间有什么区别吗?

Prelude> :t fmap (\x  -> 2x) []
fmap (\x  -> 2x) [] :: Num (t -> b) => [b]

Prelude> :t fmap (\x -> 2 * x) []
fmap (\x -> 2 * x) [] :: Num b => [b]

Prelude> :t 1 1
1 1 :: (Num (t -> t1), Num t) => t1

Prelude> :t 1 * 1
1 * 1 :: Num a => a
Run Code Online (Sandbox Code Playgroud)

有什么区别2x2*x

是什么意思Num (t -> t1) => t1 …

haskell

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

将参数映射到函数 - fmap($ 3)(4+)

使用$ in Learn You Haskell书中的阅读函数应用程序我找到了将$应用于函数列表的示例.

map ($ 3) [(4+), (10*), (^2), sqrt]
Run Code Online (Sandbox Code Playgroud)

我想尝试类似的东西并减少应用于一个功能的例子

fmap ($ 3) (4+) 
Run Code Online (Sandbox Code Playgroud)

但我得到的错误是我不明白的

• Non type-variable argument in the constraint: Num (a -> b)
  (Use FlexibleContexts to permit this)
• When checking the inferred type
    it :: forall a b. (Num (a -> b), Num a) => (a -> b) -> b
Run Code Online (Sandbox Code Playgroud)

你能帮我理解为什么它在第一种情况下起作用但它不在第二种情况下吗?我怎样才能达到预期的效果?

谢谢

haskell

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

标签 统计

haskell ×3