Elm - 合同中的开放式类型

Elm - open ended types in a contract

给定伪合约:

condy: Int -> Int -> a -> b
condy n m a b =
  if n == m then a else b

如何正确定义上述契约,使得a和b的类型相等但可以是任何类型?实际上,上面消除了对每个类型的额外功能 condyEffect[Type] 的需要:

condyPrime: Int -> Int -> Bool
condy n m =
  n == m

condyEffectInt: Bool -> Int
condyEffectInt bool k l =
  if bool then k else l

您的 condy 函数将如下所示:

condy: Int -> Int -> a -> a -> a
condy n m a b =
  if n == m then a else b

类型签名中的a -> a -> a部分只是说condy的第3个和第4个参数必须是同一类型,类型注释中最后的a说return 值需要与第三个和第四个参数的类型相同。