本质上,我想知道如何tail -F在Haskell中实现Linux命令功能.我的目标是遵循日志文件,例如Web服务器日志文件,并通过在输入时解析输入来计算各种实时统计信息.理想情况下,如果日志文件使用logrotate或类似服务轮换,则不会中断.
我有点不知道如何处理这个问题,在懒惰的I/O存在的性能方面我应该考虑什么.任何流媒体库都与此相关吗?
我正在研究一个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与所提供的可执行文件列表一起使用,但我认为上面的内容会很好.
根据标题,我很好奇为什么 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) 给出以下数据类型
{-# 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,或者它是否确实可行,或者有意义?
假设我有以下数据类型:
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机器,虽然它似乎与我想要做的事情有关,但我不清楚如何在这里使用它们.
任何建议或指示都会很高兴收到.
我正在研究以下一小段代码:
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)