dav*_*420 25
你不检查.你做.
但是真的,你想在这做什么?
Haskell将确保只能使用列表调用您的函数.如果您尝试使用非列表调用函数,则会导致编译错误.
例如
myFunction :: [a] -> String
myFunction [] = "no elements!"
myFunction [_] = "single element!"
myFunction _ = "many elements!"
Run Code Online (Sandbox Code Playgroud)
然后
myFunction [42] -- >>> "single element!"
myFunction 42 -- ERROR: not a list
Run Code Online (Sandbox Code Playgroud)
使用类型类:编写函数的不同版本,以便在使用列表调用它时以及何时使用其他类型调用(在合理范围内); 然后Haskell确保调用函数的正确版本.
例如
class MyClass a
where myFunction :: a -> String
instance MyClass Int
where myFunction 0 = "zero!"
myFunction 1 = "one!"
myFunction _ = "something!"
instance MyClass a => MyClass [a]
where myFunction [] = "no elements!"
myFunction [x] = "only " ++ myFunction x
myFunction _ = "many elements!"
Run Code Online (Sandbox Code Playgroud)
然后
myFunction [42] -- >>> "only something!"
myFunction 42 -- >>> "something!"
Run Code Online (Sandbox Code Playgroud)
通常,函数的列表版本将要调用函数的非列表版本,并以某种方式组合结果.
哪种情况适合您的情况取决于您正在尝试做什么.如果类型类合适,您可以重用标准类型类.