有一个很常见的问题很容易与haskell有关.描述它的代码段是这样的:
data JobDescription = JobOne { n :: Int }
| JobTwo
| JobThree { n :: Int }
deriving (Show, Eq)
taskOneWorker :: JobDescription -> IO ()
taskOneWorker t = do
putStrLn $ "n: " ++ (show $ n t)
main :: IO ()
main = do
-- this runs ok:
taskOneWorker (JobOne 10)
-- this fails at runtime:
-- taskOneWorker JobTwo
-- this works, but we didn't want it to:
-- taskOneWorker (JobThree 10)
Run Code Online (Sandbox Code Playgroud)
我描述了这个问题,这篇文章中可能有解决方案:https://www.fpcomplete.com/user/k_bx/playing-with-datakinds
在这里,在StackOverflow上,我想问你 - 这个问题的最佳解决方案是什么,使用哪些工具和哪些文档?