我没有使用esqueleto的任何经验,但是在快速浏览了教程之后,我认为这应该会起作用:
getAllTickers :: (MonadIO m, MonadLogger m) => SqlReadT m [Value String]
getAllTickers = select $ from $ \instrument -> return (instrument ^. InstrumentTicker)
注意不同类型的签名和不同的镜头。希望有帮助。
我看不出有什么问题
unValue
在你的解决方案中,但不要引用我的话。如果你想避免用do表示法,方法之一就是利用Monad也是函子这一事实,这样就可以使用中缀
<$>
fmap
getAllTickers' :: (MonadIO m, MonadLogger m) => SqlReadT m [String]
getAllTickers' =
map unValue <$> (select $ from $ \i -> return (i ^. InstrumentTicker))