假设我有一个函数:
arbitrary :: String -> String -> Maybe String
arbitrary st1 st2 | (st1 == st2) = Just "foo"
| (arbitrarily_complex_calculation == 7) = Nothing
| otherwise = Just $ show arbitrarily_complex_calculation
我应该如何在两个保护块之间共享任意复杂的计算?这可以通过let
/where
完成,还是必须编写一个辅助函数?
arbitrary_complex_calculation
具有多态类型(这会影响Show
实例),否则不会。此外,GHC 仅零星使用CSE(但我不知道在 GHC 7.10+ 中是否仍然如此)。 - Zeta