簡體   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