给定一个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)告诉我停止.这看起来有点笨拙而且很慢.
有一个更好的方法吗?
我有一系列套装,我想把它放在一个特里.
正常尝试由元素串组成 - 也就是说,元素的顺序很重要.设置缺少定义的顺序,因此可能会有更大的压缩.
例如,给定字符串"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) 假设我有一个像以下一样的haskell表达式:
foo (Nothing, Just a) = bar a
foo (Just a, Nothing) = bar a
Run Code Online (Sandbox Code Playgroud)
是否有任何haskell语法来折叠这些情况,所以我可以匹配任一模式并指定bar a为两者的响应?或者那就像我能得到的一样简洁?
我正在尝试将我的第一个包上传到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)
但我觉得应该有更好的东西.
假设我有一个未知固定宽度的外部容器和一个内部元素,如下所示:
<div id="outer"><div id="inner">hide me when #outer is too small</div></div>
Run Code Online (Sandbox Code Playgroud)
有没有一种方法可以#inner完全隐藏(不仅仅是剪裁),当#outer它不够宽,无法使用纯CSS显示它?
我正在切换终端应用程序,从OSX的Terminal.app到谷歌Chrome 安全外壳应用程序,并且在tmux窗口中窗格之间划分线的方式从一个终端变为另一个终端.
在Terminal.app中,分界线就是这样一条线:
在Secure Shell中,分隔线呈现为qs 行:
我可以想到三种可能的情况:
但我不确定它是什么.如果它是第3种情况,我会很乐意破解它,但是我不确定显示线路与qs 的责任是什么,因此我无法立即开始谷歌搜索并了解需要做什么.
所以我想访问字符串的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的享受实用,让自己更舒服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吗?
我在尝试根据具有类型级别列表的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) 我有一个内部模块,我想为其提供外部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)