繁体   English   中英

我如何解决这个问题:One:: Num a => a -> Bool -> a in Haskell?

[英]How I can solve this : One :: Num a => a -> Bool -> a in Haskell?

定义具有以下类型签名的函数!

One :: Num a => a -> Bool -> a

One = ?

我不明白 Num 怎么可以是 bool 并再次变成 Num。 任何人都可以帮助我理解和解决它。

Num 如何成为 bool 并再次成为 Num。 谁能帮助我理解这一点。

好吧,如果类型中的分组在左侧,就会出现这种情况,就像这样

one :: Num a => (a -> Bool) -> a

但实际上,分组在右边:

one :: Num a => a -> (Bool -> a)

所以我们需要想办法把一个a类型的值变成一个Bool值变成a类型的值。

因为我们将拥有a类型值,所以我们可以直接返回它:

one a = two 
  where
  two b = a

请注意,我必须one One更改。 One在句法上是 Haskell 中的一种类型,而one具有类型的值。 你展示的。

所以我们在这里所做的是定义值one ,它具有这种类型。 或者在Haskell,

one :: a -> (Bool -> a)

但是等等, Num a => constraint go 在哪里? 我们根本没有使用它,这就是为什么我们所能做的就是返回a

但是aNum是什么意思?

GHCi> :i Num

class Num a where
  (+) :: a -> a -> a
  (*) :: a -> a -> a
  (-) :: a -> a -> a
  negate :: a -> a
  abs :: a -> a
  signum :: a -> a

那么,任何Num都是有绝对值的,都可以取反。 因此一个可能的定义是

one :: Num a => a -> (Bool -> a)
one a = two
  where
  two b | b      = negate a
        | otherwise = abs a

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM