小编ram*_*ion的帖子

查找准备从FILE*或文件描述符中读取的字节数

给定一个FILE*或一个文件描述符,是否有一种标准的方法来告诉你有多少字节可以读取?

我不能使用,s=ftell(f),fseek(f,0,SEEK_END),e=ftell(f),fseek(f,s,SEEK_SET),e-s因为FILE*它只包装了我得到的文件描述符pipe(2),ESPIPE当我尝试时,我得到了.

我正在考虑使用select(2)零超时来告诉我至少有一个字节准备好被读取,然后一次读取一个字节,直到select(2)告诉我停止.这看起来有点笨拙而且很慢.

有一个更好的方法吗?

c pipe file-descriptor

9
推荐指数
2
解决办法
8040
查看次数

用于压缩集合尝试的算法

我有一系列套装,我想把它放在一个特里.

正常尝试由元素串组成 - 也就是说,元素的顺序很重要.设置缺少定义的顺序,因此可能会有更大的压缩.

例如,给定字符串"abc","bc""c",我将创建trie:

(*,3) -> ('a',1) -> ('b',1) -> ('c',1)
      -> ('b',1) -> ('c',1)
      -> ('c',1)
Run Code Online (Sandbox Code Playgroud)

但考虑到套{ 'a', 'b', 'c' },{ 'b', 'c' },{ 'c' },我可以创建上述线索,或者这些一一:

(*,3) -> ('a',1) -> ('b',1) -> ('c',1)
      -> ('c',2) -> ('a',1)

(*,3) -> ('a',1) -> ('c',1) -> ('b',1)
      -> ('b',1) -> ('c',1)
      -> ('c',1)

(*,3) -> ('a',1) -> ('c',1) -> ('b',1)
      -> ('c',2) -> ('a',1)

(*,3) -> ('b',2) …
Run Code Online (Sandbox Code Playgroud)

language-agnostic compression algorithm trie

9
推荐指数
1
解决办法
286
查看次数

Haskell模式匹配对称案例

假设我有一个像以下一样的haskell表达式:

foo (Nothing, Just a) = bar a
foo (Just a, Nothing) = bar a
Run Code Online (Sandbox Code Playgroud)

是否有任何haskell语法来折叠这些情况,所以我可以匹配任一模式并指定bar a为两者的响应?或者那就像我能得到的一样简洁?

syntax haskell pattern-matching

8
推荐指数
2
解决办法
604
查看次数

Haskell:针对Hackage的多个版本的基础测试包

我正在尝试将我的第一个包上传到Hackage(是的!),我收到了这个错误:

依赖项"build-depends:base"未指定版本号的上限.'base'包的每个主要版本都以各种方式更改API,大多数包需要进行一些更改才能使用它进行编译.建议的做法是指定"base"包版本的上限.这可以确保在发布新的主要版本的"基础"软件包时,您的软件包将继续构建.如果您不确定要使用的上限,请使用下一个主要版本.例如,如果您使用'base'版本2和3测试了包,则使用'build-depends:base> = 2 && <4'.

这似乎是拒绝我的包裹的完全可接受的理由.

是否有一个很好的工具来测试我的包对各种版本,base所以我可以看到界限是什么(而不仅仅是猜测)?我能想到的最好的方法是使用一些shell脚本来执行以下操作:

% for v in $BASE_VERSIONS
do
  cabal install base-$v &&\
  cabal configure --enable-tests &&\
  cabal build &&\
  cabal test && echo "$v ok" || echo "$v fail"
done
Run Code Online (Sandbox Code Playgroud)

但我觉得应该有更好的东西.

haskell base cabal

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

CSS:当容器太窄而无法完全看到它时隐藏元素

假设我有一个未知固定宽度的外部容器和一个内部元素,如下所示:

<div id="outer"><div id="inner">hide me when #outer is too small</div></div>
Run Code Online (Sandbox Code Playgroud)

有没有一种方法可以#inner完全隐藏(不仅仅是剪裁),当#outer它不够宽,无法使用纯CSS显示它?

html css

8
推荐指数
2
解决办法
7458
查看次数

tmux:窗格分隔线显示终端之间的差异

我正在切换终端应用程序,从OSX的Terminal.app到谷歌Chrome 安全外壳应用程序,并且在tmux窗口中窗格之间划分线的方式从一个终端变为另一个终端.

在Terminal.app中,分界线就是这样一条线:

在Secure Shell中,分隔线呈现为qs 行:

我可以想到三种可能的情况:

  1. 这是我可以在shell中修复的设置.
  2. 这是我可以从Secure Shell的首选项中修复的设置.
  3. 这是Secure Shell的首选项尚不支持的设置.

但我不确定它是什么.如果它是第3种情况,我会很乐意破解它,但是我不确定显示线路与qs 的责任是什么,因此我无法立即开始谷歌搜索并了解需要做什么.

terminal tmux

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

将字符串的UTF-8编码存储在ByteString中

所以我想访问字符串的UTF-8编码的各个字节.

我试过使用Data.ByteString.Char8.pack,但这似乎只是将其截断为每个字符的最后一个字节:

ghci> Char8.pack "\945\946\947" 
"\177\178\179"
Run Code Online (Sandbox Code Playgroud)

如果我可以从文件中读取字符串,这不是问题:

ghci> Prelude.writeFile "temp.txt" "\945\946\947" >> Char8.readFile "temp.txt"
"\206\177\206\178\206\179"
Run Code Online (Sandbox Code Playgroud)

但是我想要一种纯粹的方式来转换String -> ByteString而不会截断,并且hoogle不是很有帮助.

haskell utf-8 bytestring

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

使用带有cabal的Makefile?

我工作的一个玩具项目,以此来从理论上将我的Haskell的享受实用,让自己更舒服cabal,HUnit等等.

我刚刚在我的项目中添加了一个Makefile:

test: dist/build
  cabal-dev test

dist/build: dist/setup-config src/*.hs tests/*.hs
  cabal-dev build
  touch dist/build

dist/setup-config: ToyProject.cabal
  cabal-dev configure --enable-tests
Run Code Online (Sandbox Code Playgroud)

因为:

  • cabal-dev install --enable-tests 看起来有点矫枉过正(并警告我重新安装)
  • cabal-dev configure --enable-tests && cabal-dev build && cabal-dev test 正在做不必要的工作,并保持关于我是否需要重新配置的状态很无聊
  • 而且两者都打字很多

我担心我可能正在使用Make cabal或者cabal-dev已经给我重新创建功能,但是我不熟悉它们是否真的,如果它是,我怎么做.

这里的Makefile是否合适,或者只是使用cabal/ 有更直接的方法cabal-dev吗?

haskell makefile

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

模式同义词不能统一类型级列表中的类型

我在尝试根据具有类型级别列表的GADT定义模式同义词时遇到错误.

我设法把它归结为这个例子:

{-# LANGUAGE GADTs #-}
{-# LANGUAGE KindSignatures #-}
{-# LANGUAGE DataKinds #-}
{-# LANGUAGE TypeOperators #-}
{-# LANGUAGE PatternSynonyms #-}
module Example where

data L (as :: [*]) where
  L :: a -> L '[a]

pattern LUnit = L ()
Run Code Online (Sandbox Code Playgroud)

给我:

Example.hs:11:17:
    Couldn't match type ‘a’ with ‘()’
      ‘a’ is a rigid type variable bound by
          the type signature for Example.$bLUnit :: (t ~ '[a]) => L t
          at Example.hs:11:17
    Expected type: L t
      Actual type: L '[()] …
Run Code Online (Sandbox Code Playgroud)

haskell data-kinds pattern-synonyms

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

隐藏构造函数但不导入导入类型

我有一个内部模块,我想为其提供外部API

module Positive.Internal where

newtype Positive a = Positive { getPositive :: a }
  deriving (Eq, Ord)

-- smart constructor
toPositive :: (Num a, Ord a) => a -> Maybe (Positive a)
toPositive a | a <= 0    = Nothing
             | otherwise = Just $ Positive a
-- ...
Run Code Online (Sandbox Code Playgroud)

我想隐藏哑构造函数,并用单向模式替换它,这样用户仍然可以模拟匹配值,他们只需要使用智能构造函数来使用新值.

由于我希望模式和哑构造函数使用相同的名称,我需要隐藏哑构造函数以防止命名空间冲突.

但是,由于哑构造函数和类型共享名称,导入一切但是愚蠢的构造函数有点棘手.

目前我正在这样做,这可行:

{-# LANGUAGE PatternSynonyms #-}
module Positive
  ( module Positive.Internal, pattern Positive
  ) where

import Positive.Internal (Positive())
import Positive.Internal hiding (Positive)
import qualified Positive.Internal as Internal

pattern Positive …
Run Code Online (Sandbox Code Playgroud)

haskell module

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