使用(可能是)参数“通用”进行功能

sch*_*ttl 0 haskell type-inference

let updateFunc = updatedMaybeProperty srcTitle targetTitle :: (Title -> Maybe a) -> Maybe a
    _ = updateFunc (titleVersion      :: Title -> Maybe Text)
    _ = updateFunc (titleYearProduced :: Title -> Maybe Integer)
Run Code Online (Sandbox Code Playgroud)

我在第3行中收到此错误:

    • Couldn't match type ‘Text’ with ‘Integer’
      Expected type: Title -> Maybe Text
        Actual type: Title -> Maybe Integer
    • In the first argument of ‘updateFunc’, namely
        ‘(titleYearProduced :: Title -> Maybe Integer)’
Run Code Online (Sandbox Code Playgroud)

显然,在第2行中,编译器为推断类型,Maybe a并决定a必须始终为Text

我怎样才能防止这种情况,并使其成为updateFunc“泛型”,以便它适用于不同的类型a

chi*_*chi 6

尝试注释绑定,而不是表达式。

let updateFunc :: (Title -> Maybe a) -> Maybe a
    updateFunc = updatedMaybeProperty srcTitle targetTitle
    _ = updateFunc (titleVersion      :: Title -> Maybe Text)
    _ = updateFunc (titleYearProduced :: Title -> Maybe Integer)
Run Code Online (Sandbox Code Playgroud)