如何声明一个参数可以是 (Int, Int) 或 Maybe (Int, Int) 的函数?

Hec*_*tor 2 haskell functional-programming

我正在尝试编写一个函数,其第三个参数可以是 an(Int, Int)或 a Maybe (Int, Int)。这可能吗?

randomFunction :: [Char] -> [[Int]] -> Either (Int, Int) Maybe (Int, Int) -> Bool
Run Code Online (Sandbox Code Playgroud)

Dan*_*ner 8

您询问的语法是:

Either (Int, Int) (Maybe (Int, Int))
Run Code Online (Sandbox Code Playgroud)

但这不太可能是惯用的解决方案。我怀疑这更有可能是以下两种解决方案之一:

  1. 接受Maybe (Int, Int)。手中有 的呼叫者(Int, Int)可以将其包装在Just. (此解决方案始终可以应用。)
  2. 接受(Int, Int)。提供一个默认值(Int, Int)(例如,(0, 0)当然,正确的选择取决于函数的功能),如果调用者有 aMaybe (Int, Int)并且其值为 ,则可以使用该默认值Nothing。(此解决方案几乎总是可行的,但在极少数情况下,该函数可能会进行Nothing特殊处理,以至于无法由任何特定的 来模拟(Int, Int)。)