[英]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
。
但是a
是Num
是什么意思?
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.