Haskell 持久的';t匹配预期类型‘;键表’;使用实际类型文本

Haskell 持久的';t匹配预期类型‘;键表’;使用实际类型文本,haskell,yesod,persistent,Haskell,Yesod,Persistent,我不知道这对你来说真的是个问题,但对我来说是个大问题。 我有一个用html创建的表单,其中一个字段将保存城市列表(它是一个选择标记),因此该选项的值包含city\u id 在我的帖子处理程序中,它将如下所示: postPriceR :: Handler Html postPriceR = do now <- liftIO getCurrentTime city <- runInputPost $ ireq textField "city" amount &

我不知道这对你来说真的是个问题,但对我来说是个大问题。 我有一个用html创建的表单,其中一个字段将保存城市列表(它是一个选择标记),因此该选项的值包含
city\u id

在我的帖子处理程序中,它将如下所示:

 postPriceR :: Handler Html
 postPriceR = do
    now <- liftIO getCurrentTime
    city <- runInputPost $ ireq textField "city"
    amount <- runInputPost $ ireq textField "amount"
    runDB $ insert $ Prices city 100.0 now Nothing
    redirect PriceR
给我一个警告:

 Couldn't match expected type ‘Key Cities’ with actual type Text …

希望你能帮助我。谢谢。

我使用@CarstenKönig help解决了这个问题。使用

这是:

导入数据.Int

runDB $ insert $ Prices (toSqlKey (read (unpack city) :: Int64 ) ) 100.0 now Nothing

谢谢大家的帮助。

问题是,
persistent
不知道如何将
文本
转换到数据库密钥中-假设您有某种SQL存储,通常的解决方案是使用@BitTickler look,这里刚刚提到-如果您在YesO中对函数命名有问题,您应该转到他们的github页面并在那里打开一个问题-在这里您只需trolling@CarstenKönig-你能给我一个片段吗?谢谢,这有点棘手,因为我无法编译/检查您的代码-而是在
runDB$insert$Prices city…
中使用
city'
,就像
let city'=toSqlKey一样。阅读解包$city
-您可能需要导入
toSqlKey
unpack
,或者最好使用
intField
,然后可以删除
读取。打开包装
东西!差不多;)-我很好
runDB $ insert $ Prices (toSqlKey (read (unpack city) :: Int64 ) ) 100.0 now Nothing