我需要這樣呼叫我的函式:
myFunc 1 5 4 3 6 2 7 8 9 5 1 3
或
myFunc 2 6 4
如何撰寫我的型別以便它接受未知數量的引數并將它們放入串列中?我想做這樣的事情:
myFunc :: Int -> IO () -- I don't know what type to put replace Int with
myFunc a =
return a
myFunc 1 2 5 4 8
應該回傳
[1,2,5,4,8]
uj5u.com熱心網友回復:
可以接受“未知數量的引數”的函式稱為可變引數函式。Haskell 不支持可變引數函式,但它有足夠靈活的型別系統來偽造它們。
這被稱為“ printf技巧”,被廣泛認為是一種尷尬的 hack。請三思你是否真的想要這個——它不是慣用的 Haskell,它可能會導致奇怪的錯誤訊息,并且有很多替代方法可能對你同樣有效或更好。
順便說一句,這里是如何做到這一點:
{-# LANGUAGE TypeFamilies #-}
class MyFuncType a where
myFuncAcc :: [Int] -> a
instance a ~ () => MyFuncType (IO a) where
myFuncAcc = print
instance (MyFuncType a, c ~ Int) => MyFuncType (c -> a) where
myFuncAcc l h = myFuncAcc $ h:l
myFunc :: MyFuncType a => a
myFunc = myFuncAcc []
main :: IO ()
main = myFunc 1 2 5 4 8
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/406350.html
標籤:
上一篇:為什么像函式型別這樣的代數資料型別是指數的?[復制]
下一篇:專案特定位置的Haskell堆疊
