小编ppb*_*ppb的帖子

如何(有效地)使用Haskell跟踪/尾随文件,包括检测文件轮换?(尾部-F)

本质上,我想知道如何tail -F在Haskell中实现Linux命令功能.我的目标是遵循日志文件,例如Web服务器日志文件,并通过在输入时解析输入来计算各种实时统计信息.理想情况下,如果日志文件使用logrotate或类似服务轮换,则不会中断.

我有点不知道如何处理这个问题,在懒惰的I/O存在的性能方面我应该考虑什么.任何流媒体库都与此相关吗?

haskell

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

Emacs Lisp - 使用变量/变量名称声明函数

我正在研究一个Emacs Lisp软件包,我想添加的一个特殊功能是能够动态定义函数 - 它们将遵循相同的命名约定,但它可以帮助我不必手动声明它们中的每一个.

举个例子,我有一个名为exec的基本函数,它接受一个参数,该参数是要启动的可执行文件的名称:

(def exec (cmd)
    (async-shell-command cmd "buffer"))
Run Code Online (Sandbox Code Playgroud)

同时,在这种特殊情况下,我知道我想要使用的可执行文件列表 - 或者更确切地说,我知道如何获取它们的列表,因为它可以随时间变化.所以我想做的是,给出以下可执行文件列表:

("a" "b" "c")
Run Code Online (Sandbox Code Playgroud)

是迭代它们并为每个创建一个名为exec- [executable]的函数 - exec-a,exec-b,exec-c.

不幸的是,defun不会评估NAME参数,因此我无法动态创建函数名称.

PS.exec命令本身就足够了 - 它completing-read与所提供的可执行文件列表一起使用,但我认为上面的内容会很好.

emacs

5
推荐指数
1
解决办法
360
查看次数

为什么 GHC 在这里发出不正确的“冗余约束”警告?

根据标题,我很好奇为什么 GHC 在删除冗余约束导致代码不再编译时发出有关冗余约束的警告。

\n\n
{-# LANGUAGE FlexibleContexts #-}\n{-# LANGUAGE FunctionalDependencies #-}\n{-# LANGUAGE GADTs #-}\n{-# LANGUAGE GeneralizedNewtypeDeriving #-}\n{-# LANGUAGE MultiParamTypeClasses #-}\n{-# LANGUAGE NoImplicitPrelude #-}\n{-# LANGUAGE OverloadedStrings #-}\n{-# LANGUAGE QuasiQuotes #-}\n{-# LANGUAGE ScopedTypeVariables #-}\n{-# LANGUAGE TemplateHaskell #-}\n{-# LANGUAGE TypeFamilies #-}\n\nmodule Lib where\n\nimport           Protolude hiding (from, try)\n\nimport           Control.Exception.Safe\nimport           Database.Esqueleto\nimport           Database.Persist.TH\n\nnewtype PingId =\n  PingId Int\n  deriving (Enum, Eq, Integral, Num, Ord, Real, Show)\n\ndata Ping = Ping\n  {\n  } deriving (Show)\n\nshare [mkPersist sqlSettings] [persistLowerCase|\nDbPing sql=pings\n|]\n\npingToDbPing :: Ping -> DbPing\npingToDbPing _ = undefined\n\ndbPingToPing :: DbPing -> …
Run Code Online (Sandbox Code Playgroud)

haskell ghc

5
推荐指数
0
解决办法
437
查看次数

是否可以为GADT创建一个monoid实例?

给出以下数据类型

{-# LANGUAGE GADTs #-}

data Response a where
  ResponseMap :: HashMap Text (Sum Int) -> Response (HashMap Text (Sum Int))
  ResponseSum :: Sum Int -> Response (Sum Int)
Run Code Online (Sandbox Code Playgroud)

我如何为它推导出一个monoid实例?对于mappend我可以在构造函数上进行模式匹配的定义

  (ResponseSum v1) `mappend` (ResponseSum v2) = undefined
  (ResponseMap v1) `mappend` (ResponseMap v2) = undefined
Run Code Online (Sandbox Code Playgroud)

并轻松地组合这些值,但我不知道我将如何实现mempty,或者它是否确实可行,或者有意义?

haskell gadt

3
推荐指数
1
解决办法
117
查看次数

如何在Haskell中一般遍历嵌套记录查找特定值?

假设我有以下数据类型:

data Person = Person
  { personName :: String
  , personAddress :: Maybe PersonAddress
  }

data PersonAddress = PersonAddress
  { personAddressStreet :: String
  , personAddressStreet1 :: Maybe String
  , personAddressStreet2 :: Maybe PersonAddressStreet2
  }

data PersonAddressStreet2 = PersonAddressStreet2
  { personAddress2StreetStreet :: Maybe String
  , personAddress2StreetNumber :: Maybe Int
  }
Run Code Online (Sandbox Code Playgroud)

有没有办法以Person通用方式遍历类型的值并报告哪些特定字段的值为Nothing

理想情况下,我希望看到嵌套结构中找到值的完整路径(例如(Person) personAddress -> (PersonAddress) personAddressStreet1)

我看了Typeable/Generic机器,虽然它似乎与我想要做的事情有关,但我不清楚如何在这里使用它们.

任何建议或指示都会很高兴收到.

generics haskell

3
推荐指数
1
解决办法
399
查看次数

为什么来自Data.Traversable的'for'接受monadic动作?

我正在研究以下一小段代码:

import           Control.Monad
import           Data.Aeson
import qualified Data.HashMap.Strict as HashMap
import           Data.Map (Map)
import qualified Data.Map as Map
import           GHC.Generics

-- definitions of Whitelisted, WhitelistComment and their FromJSON instances
-- omitted for brevity

data Whitelist = Whitelist
  { whitelist :: Map Whitelisted WhitelistComment
  } deriving (Eq, Ord, Show)

instance FromJSON Whitelist where
  parseJSON (Object v) =
    fmap (Whitelist . Map.fromList) . forM (HashMap.toList v) $ \(a, b) -> do
      a' <- parseJSON (String a)
      b' <- parseJSON b
      return (a', …
Run Code Online (Sandbox Code Playgroud)

haskell traversable

3
推荐指数
2
解决办法
127
查看次数

标签 统计

haskell ×5

emacs ×1

gadt ×1

generics ×1

ghc ×1

traversable ×1