Haskell 有人能给我解释一下我该如何着手修复这个类型签名吗?
这是代码,我试着让类型推断出函数的类型。代码编译时,会在运行时失败Haskell 有人能给我解释一下我该如何着手修复这个类型签名吗?,haskell,types,persistent,yesod,Haskell,Types,Persistent,Yesod,这是代码,我试着让类型推断出函数的类型。代码编译时,会在运行时失败 Ambiguous type variables `b0', `m0' in the constraint: (PersistBackend b0 m0) arising from a use of `isFree' Probable fix: add a type signature that fixes these type variable(s) In the expression: isFree testDay In
Ambiguous type variables `b0', `m0' in the constraint:
(PersistBackend b0 m0) arising from a use of `isFree'
Probable fix: add a type signature that fixes these type variable(s)
In the expression: isFree testDay
In an equation for `it': it = isFree testDay
:t是免费的
isFree::PersistBackend b m=>C.Day->b m Bool
>isFree day = do
match <- selectList [TestStartDate ==. day,
TestStatus !=. Passed,
TestStatus !=. Failed] []
if (L.null match) then (liftIO $ return True) else (liftIO $ return False)
>isFree day=do
matchghci告诉您它不知道为b
和m
选择哪种类型的表达式。你所要做的就是说出来
isFree testDay :: Foo Bar Bool
在实际程序中,这些类型变量通常在使用站点确定,因此您很少需要在那里指定表达式的类型。在ghci提示下,上下文丢失,因此您通常必须这样做
与此无关,isFree的最后一行最好是return$L.null match
ghci告诉您它不知道为b
和m
选择哪种类型的表达式。你所要做的就是说出来
isFree testDay :: Foo Bar Bool
在实际程序中,这些类型变量通常在使用站点确定,因此您很少需要在那里指定表达式的类型。在ghci提示下,上下文丢失,因此您通常必须这样做
与此无关,isFree的最后一行最好是返回$L.null match
“当代码编译时,它在运行时失败。”在向此函数提供类型时不太可能出现错误
“fail”是什么意思?“代码编译时会在运行时失败。”为该函数提供类型时不太可能出现错误
“失败”是什么意思?这很尴尬。一方面,这个问题确实让我深入研究了单子。另一方面,这个问题已经为我解答了。运行数据库操作时,将结果像这样传递给runDB
>isFree day = do
match <- runDB $ selectList [TestStartDate ==. day,
TestStatus !=. Passed,
TestStatus !=. Failed] []
if (L.null match) then (liftIO $ return True) else (liftIO $ return False)
>isFree day=do
match这太尴尬了。一方面,这个问题确实让我深入研究了单子。另一方面,这个问题已经为我解答了。运行数据库操作时,将结果像这样传递给runDB
>isFree day = do
match <- runDB $ selectList [TestStartDate ==. day,
TestStatus !=. Passed,
TestStatus !=. Failed] []
if (L.null match) then (liftIO $ return True) else (liftIO $ return False)
>isFree day=do
matchliftIO(return x)
可能只是return x
。不确定MonadIO
或MonadTrans
实例是否有任何“定律”,但如果有,肯定会有一个。=)不知道什么是Foo和Bar。当然,谢谢。引用我最喜欢的签名:“如果我没有看到更多,那就是站在巨人的脚印上。”@MichaelLitchard:不管你想要什么,只要有一个实例,Foo Bar
liftIO(return x)
很可能就是return x
。不确定MonadIO
或MonadTrans
实例是否有任何“定律”,但如果有,肯定会有一个。=)不知道什么是Foo和Bar。当然,谢谢。引用我最喜欢的签名:“如果我没有看到更多,那就是站在巨人的脚印上。”@MichaelLitchard:不管你想要什么,只要有一个Foo Bar
。