小编Tip*_*ler的帖子

(-) 怎么可能有两种不同的类型?

在ghci中,当我输入

:t (-)
Run Code Online (Sandbox Code Playgroud)

找出 的类型(-),它返回

(-) :: Num a => a -> a -> a
Run Code Online (Sandbox Code Playgroud)

但是,当我写-1haskell 时返回一个数字,这似乎暗示它(-)的类型为Num a => a -> a。怎么可能(-)看似有两种不同的类型?

haskell

17
推荐指数
3
解决办法
192
查看次数

Haskell - 应用将函子返回到函子上的函数

假设我有两个函数fg它们都接受常规值并返回一个Either像这样的值:

g :: a -> Either x b
f :: b -> Either x c
Run Code Online (Sandbox Code Playgroud)

我如何将两者链接在一起以获得类似的东西f . g

我想出的最佳解决方案是创建一个名为的辅助函数applyToRight,其工作方式如下

applyToRight :: (a -> Either x b) -> Either x a -> Either x b
applyToRight f x =
  case x of
    Left a -> Left a
    Right b -> f b
Run Code Online (Sandbox Code Playgroud)

这样我就可以做

applyToRight f (g a)
Run Code Online (Sandbox Code Playgroud)

在这种情况下,我专门谈论Either,但我认为这个问题可以推广到所有应用函子。处理这个问题的最优雅的方法是什么?

haskell composition functor function-composition applicative

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

Haskell - 在 where 语句中定义多个辅助函数

我正在考虑将仅由一个函数访问的辅助函数放入一条where语句中。它看起来像这样。

f :: Int -> Int
f a = g a + 1
  where
    g :: Int -> Int
    g a = 2 * a
Run Code Online (Sandbox Code Playgroud)

(这个例子只是为了说明这个想法。)

对我来说,这样做的好处是这些辅助函数可以访问顶级函数的所有参数,并且很清楚辅助函数的用途。

这种方法有什么问题或缺点吗?

haskell

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