小编Tom*_*lis的帖子

如何让esqueleto为我生成一个SQL字符串?

如何从from语句中生成esqueleto以生成SQL字符串?

文档toRawSql说"你可能只是打开持久性的查询记录".我尝试了所有可能的形式MonadLogger,但我从未打印过任何SQL.同样的文档也说"手动使用这个功能......可能但很乏味".但是,不会QueryType导出该类型的构造函数,也不会导出返回该类型值的任何函数.我设法通过注意这QueryType是一个newtype和使用来解决这个问题unsafeCoerce!

我也被迫提供Connection(我通过SQLite获得),即使不需要连接到数据库来生成SQL.

这就是我所拥有的.肯定有更好的办法.

withSqliteConn ":memory:" $
    \conn -> return $ toRawSql SELECT
                               (unsafeCoerce ((const mempty)
                                  :: a -> Text.Lazy.Builder.Builder))
                               (conn, initialIdentState) myFromStatement)
Run Code Online (Sandbox Code Playgroud)

http://hackage.haskell.org/package/esqueleto-1.3.4.2/docs/Database-Esqueleto-Internal-Sql.html

haskell yesod esqueleto

86
推荐指数
1
解决办法
2580
查看次数

如何在Haskell中表示共享树

我想在Haskell中表示以下形状的"树":

   /\                            
  /\/\
 /\/\/\
/\/\/\/\
` ` ` ` `
Run Code Online (Sandbox Code Playgroud)

/和\是分支和`叶子.您可以看到从左侧路径开始的任何节点开始,然后右侧将您带到与右侧路径相同的节点,然后是左侧.您应该能够标记叶子,在每个节点应用两个后代的函数,并在O(n ^ 2)时间内将此信息传播到根.我天真的努力给了我一个指数的运行时间.任何提示?

haskell functional-programming

16
推荐指数
1
解决办法
1179
查看次数

Git合并的顺序是否重要?

假设我有两个分支,A并且B.以下属性是否成立?

  • 合并AB冲突,当且仅当合并BA冲突.
  • 我的文件合并后的内容AB是一样的我的文件合并后的内容BA.

git git-merge

14
推荐指数
2
解决办法
1933
查看次数

为什么全懒惰是默认优化?

全懒惰已经 反复 证明 ,以 使 空间 的泄漏.

为什么从一-O开始就充分懒惰?我发现自己不相信SPJ的"函数式编程语言的实现"中的推理.声称是在

f = \y -> y + sqrt 4
Run Code Online (Sandbox Code Playgroud)

sqrt 4每次f输入都会不必要地重复,所以我们应该将它浮动到lambda之外.我同意这一点,但是因为我们已经看到了这种转变导致的大问题我不相信它是值得的.在我看来,这种转换的好处可以单方面获得**只有本地代码更改,而想要它的程序员应该手动实现它.

你能说服我吗?是full-laziness居然真的有用吗?如果你能提供需要多边合作或非地方转型的手工实施的例子,我将特别相信.

**与内联和流融合等优化不同,手动实现需要模块之间的多边合作和非本地代码更改

haskell ghc

11
推荐指数
1
解决办法
1021
查看次数

为什么MFunctor的"提升"没有"Monad n"约束?

我有一个coroutine变压器

data Step y m a = Done a | Yield y (CoT y m a)

data CoT y m a = CoT (m (Step y m a))
Run Code Online (Sandbox Code Playgroud)

Monad实例

unCoT :: CoT y m a -> m (Step y m a)
unCoT (CoT m) = m

instance Monad m => Monad (CoT y m) where
    return  = CoT . return . Done
    CoT x >>= f = CoT $ do
      x' <- x
      case x' of
        Done a …
Run Code Online (Sandbox Code Playgroud)

haskell

8
推荐指数
1
解决办法
263
查看次数

如何使用Data.Constraint来约束约束?

我有类型的功能

(forall m. (MonadCo r m, MonadReader Int m) => m ())
    -> (forall m. (MonadCo r m, MonadReader Int m) => m ())
Run Code Online (Sandbox Code Playgroud)

(MonadCo我自己的类型类代表一个协程monad.如果你愿意,你可以考虑这个案例MonadError e m.问题将是相同的.)

看起来我应该能够重新定义约束并最终得到类型签名的函数

(Equals k (MonadCo r, MonadReader Int))
    => (Constrain k ()) -> (Constrain k ())
Run Code Online (Sandbox Code Playgroud)

但我不知道如何在实践中实现这一点.我完全不知道是什么:-,:=>实际上是什么.我想我也需要一个Forall1在那里,因为我普遍量化m,但我不知道它应该适合.

我真正想做的是重新制定forall m. (MonadCo r m, MonadReader Int m)约束.我认为,当我这样做时,左边出现的任何结果都将自动成为"正确的东西".

Data.Constraint 似乎非常强大,但我无法找到从哪里开始.

haskell

7
推荐指数
1
解决办法
289
查看次数

如何实现索引核心风格的索引状态monad?

我试图理解index-core风格中的索引monad .我陷入了一个悖论,即在构建一些例子之前我无法理解这些原则,在理解这些原理之前我无法构建例子.

我正在尝试构建一个索引状态monad.到目前为止,我的直觉告诉我它应该是这样的

type a :* b = forall i. (a i, b i)
newtype IState f a i = IState { runIState :: f i -> (a :* f) }
Run Code Online (Sandbox Code Playgroud)

并且我可以通过适当的设置f = Identity和选择来恢复"受限制"状态monad a:

type IState' s s' a = IState Identity (a := s') s
Run Code Online (Sandbox Code Playgroud)

但我感到很失落.有人可以确认我的线路正确吗?

在索引的延续monad上使用类似的问题作为指导,但我认为它不够接近.

monads haskell

7
推荐指数
1
解决办法
167
查看次数

为什么 __nss_database_lookup 在我的数值 C++ 程序中花费了大部分时间

行分析输出google-pprof声称我的数值 C++ 程序的大部分运行时间都花费在一个名为的函数中__nss_database_lookup(见下文)。显然,该函数用于处理passwdUNIX 系统上的文件等内容。我的 C++ 程序应该只进行数值计算、分配内存以及传递一些自定义 C++ 数据类型。

这是怎么回事?该功能的出现是否是海市蜃楼,仅仅是google-pprof工作原理的产物?或者它实际上被调用并浪费了我的程序三分之二的运行时间?如果它被调用,那么调用它的可能是什么?我的 C++ 类中是否有错误地调用了它?我该如何追踪呢?

我正在使用 Ubuntu 20.04,g++-7并且g++-9.

Total: 1046 samples
     665  63.6%  63.6%      665  63.6% __nss_database_lookup ??:0
     107  10.2%  73.8%      193  18.5% <function1> file.h:1035
      92   8.8%  82.6%       92   8.8% <function2> file.h:...
      87   8.3%  90.9%       87   8.3% <function3> file.h:995
      17   1.6%  92.5%      734  70.2% <function4> file.h:1128
...
Run Code Online (Sandbox Code Playgroud)

(出于保密原因,函数和文件名被隐藏)

c++ profiling

7
推荐指数
1
解决办法
1466
查看次数

如何以通用方式在Postgres中添加空行

我想要做

select col1, col2 from foo union values (null, null)
Run Code Online (Sandbox Code Playgroud)

但是null默认类型为TEXT,因此出现错误“ UNION类型[例如]整数和文本无法匹配”。在特定情况下,我可以提供foo的列类型,但是我以编程方式构造SQL语句,如果我不必随身携带列类型信息,那将是更好的选择。

有没有解决方法?

sql postgresql

6
推荐指数
1
解决办法
2056
查看次数

处理活性香蕉中的当前时间

你如何应对当前反应香蕉的时间?

理想情况下,我希望有一个Behaviour我可以"轮询"以获得当前时间.但是,BehaviourEvents(通过<@等)进行轮询给出Behaviour前一个 Event值,而不是当前值.(我意识到这是为了避免确实有用的循环定义.)

我发现fromPoll我认为会有所帮助. Behaviour这是从观察到的小号fromPoll不能依靠自己,因此没有周期可以通过观察行为出台之前这个Event被解雇,而不是刚过以前Event解雇.

一个题外话

在某些更正式的术语中,我建议Events总是在时间t +发生,并且Behaviours总是在时间t观察到-Event观察在它们之前无限短时间内发生的行为.新价值Behaviour的生成S- accumB和朋友们总是准时开始T +所以无法通过观察EventS的也发生在时间T +.

在这个建议的语义下Behaviour,fromPoll将在每个Event处理之前更新.其他Behaviours将在之后更新,因为它们是由accumB朋友创建的.

我的用例

无论如何,这对我的主要问题来说是一个重要的题外话.我想知道是否有某种方式来处理当前时间(而不是时间以前 Event在反应香蕉).例如,我的用例是跟踪实体发送的ping,以及它们中的任何一个是否在特定时间间隔内没有发送ping来发出警告事件.

当然,我可以并且会非常频繁地发射事件,所以我的警告不会大量错误.然而,它似乎是一个瑕疵,他们不能准确.

处理这个问题的正确方法是什么?

haskell frp reactive-banana

6
推荐指数
1
解决办法
333
查看次数