我們剛開始在大學學習Haskell,在我的一個家庭作業問題中,我們必須為這個型別簽名定義一個函式:
f1 :: Integral a => a
說實話,我還在努力理解關于Haskell的一堆基礎知識,但我知道用Integral,你可以做mod和div,加上你可以用Num、 、-和*做的。
所以我可以寫
f1 :: Integral a=> a -> a
f1 k = k `mod` k
而且它將會作業。但用
f1 :: Integral a => a
似乎沒有輸出。
我怎樣才能用這個寫出在解釋時不出錯的東西呢?
uj5u.com熱心網友回復:
你是對的,Integral沒有那種形狀的東西。但是Integral也是很多其他的東西,如果我們向上追溯層次,我們看到每個Integral都是一個Num,而每個Num有
fromInteger :: Num a => Integer -> a
因此,對于你的函式,我們可以這樣寫
f1 :: Integral a => a
f1 = fromInteger 0
或者
f1 :: Integral a => a
f1 = fromInteger 42
或者,坦率地說,選擇你喜歡的數字。
另外,由于Haskell的魔力,字面的數字42實際上是fromInteger 42(字面的42,在Haskell中,有Num a => a型別。所以這個函式也就足夠了。
f1 :: Integral a => a
f1 = 42
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/329816.html
標籤:
上一篇:生成Haskell模塊的依賴樹
