我开始做99个haskell问题,我遇到问题7,我的单元测试爆炸了.
显然,这是由于:http://www.haskell.org/haskellwiki/Monomorphism_restriction
我只是想确保我理解正确,因为我有点困惑.
情况1:func a定义为没有类型def或非严格类型def然后使用一次,编译器在编译时没有问题推断类型.
情况2:相同FUNC a在程序中使用多次,编译器不能100%确定是什么类型,除非它重新计算对于给定参数的函数.
为了避免计算损失,ghc向程序员抱怨它需要严格的类型def a
才能正常工作.
我想在我的情况下,assertEqual有类型def
assertEqual :: (Eq a, Show a) => String -> a -> a -> Assertion
Run Code Online (Sandbox Code Playgroud)
当test3我被定义为我解释为它有两种可能的类型testcase3(Show和Eq)并且不知道如何继续时,我得到了一个错误.
这听起来是否正确还是完全关闭?
problem7.hs:
-- # Problem 7
-- Flatten a nested list structure.
import Test.HUnit
-- Solution
data NestedList a = Elem a | List [NestedList a]
flatten :: NestedList a -> [a]
flatten (Elem x) = [x]
flatten (List x) = …Run Code Online (Sandbox Code Playgroud)