我可以以某种方式声明自定义数字类型吗?例如,我想要一个UnixMsDate和一个UnixSDate类型,我想如果TS可以帮助我总是区分和消除这两者之间的歧义,这意味着我从不会意外混淆它们.虽然能够明确地在它们之间(和/从数字)进行转换.
我试过type UnixMsDate = number并编译,但它似乎只是数字的可互换别名.
我正在寻找什么可能吗?
从而我可以构建一个匿名的临时记录; 这是可编辑的,可附加的,可修改的,其中每个值可以具有不同的异构类型,并且编译器检查消费者类型期望与所有给定键的生成记录的类型是否统一?
与Purescript支持的类似.
是否可能有WriterT monad tell在异常情况下能够共享其部分收集的s?如果我try以外runWriterT的地方w似乎被丢弃了。如果我尝试try进去,我似乎需要MonadUnliftIO。MonadUnliftIO听起来它可能对我有帮助,但是该软件包说它只能解除单子语境,而不能解除我想为Writer的单子态。有没有人用Writer或类似工具做到这一点?
伪代码示例:
x <- runWriterT $ do
result <- try $ do
tell "a"
tell "b"
error "c"
tell "d"
case result of
Left e -> Just e
Right a -> Nothing
x `shouldBe` (Just "c", "ab")
Run Code Online (Sandbox Code Playgroud) 我有函数f,我想用函数扩充g,导致函数命名h.
通过"扩充",在一般情况下,我的意思是:转换函数的输入(一个或多个参数)或输出(返回值)f.
通过"扩充",在特定情况下,(特定于我当前的情况)我的意思是:只转换函数的输出(返回值),f同时保持所有参数不变.
通过"透明",在"扩充"的背景下,(一般情况和具体情况)我的意思是:g尽可能松散地实现耦合的实现f.
在我目前的情况下,这是我需要做的:
h a b c = g $ f a b c
我有兴趣将其重写为以下内容:
h = g . f -- Doesn't type-check.
因为从的角度h和g,也无所谓什么样的参数f需要,他们只关心返回值,因此这将是紧耦合提论据以任何方式.例如,如果f将来的参数计数发生变化,h还需要进行更改.
我在#haskell IRC频道问了lambdabot:@pl h a b c = g $ f a b c我得到了回复:
h = ((g …
我可以限制正在运行的进程的CPU百分比以及它当前和未来的所有子进程可以使用的组合吗?我听说过这个cpulimit工具,但这似乎忽略了子进程.
编辑:所以,我发现的答案需要cpulimit不断运行,直到我们希望限制保持有效,因为它通过主动发送暂停然后继续向进程发送信号来进行限制.是否有其他方法可以实现这种限制效果,也许不需要在后台运行这样的辅助过程?
我正在学习GHCi:破解功能.JS有一个内置语句debugger;,如果正在进行调试,它将充当断点,否则不执行任何操作.
Haskell/GHCi有类似的声明/功能吗?
我正在思考一些事情Debug.Trace.trace :: String -> a -> a.
如果它在unsafePerformIO内部使用,或者依赖GHCi特定的东西,它是可以的,因为它仅用于调试.
或者,如果还没有任何东西,可能不会有这样的东西,:set -fbreak-on-exception并有一个抛出异常并立即捕获它的函数?(unsafePerformIO这里也可能需要,因此函数可以放在纯代码中.)
任何人都知道如何/可以Foo在此代码中扩展GADT :
{-# language GADTs #-}
{-# language DeriveGeneric #-}
{-# language DeriveAnyClass #-}
{-# language TemplateHaskell #-}
{-# language StandaloneDeriving #-}
import Prelude (Int, String, print, ($))
import Data.GADT.Show ()
import Data.GADT.Compare ()
import Data.Dependent.Map (DMap, fromList, (!))
import Data.Dependent.Sum ((==>))
import Data.GADT.Compare.TH (deriveGEq, deriveGCompare)
import Data.Functor.Identity (Identity)
data Foo a where
AnInt :: Foo Int
AString :: Foo String
deriveGEq ''Foo
deriveGCompare ''Foo
dmap1 :: DMap Foo Identity
dmap1 = fromList [AnInt ==> 1, …Run Code Online (Sandbox Code Playgroud) 假设我有这个类型类:
import GHC.Stack
class Foo a where
foo :: a
instance Foo Int where
foo = undefined
Run Code Online (Sandbox Code Playgroud)
如何将HasCallStack约束添加到foo值?我试过这样的:
class (HasCallStack) => Foo a where
foo :: a
instance (HasCallStack) => Foo Int where
foo = undefined
Run Code Online (Sandbox Code Playgroud)
我得到一个类型错误,如:
source.hs:10:1: error:
• Illegal implicit parameter ‘?callStack::CallStack’
• In the context: HasCallStack
While checking the super-classes of class ‘Foo’
In the class declaration for ‘Foo’
Run Code Online (Sandbox Code Playgroud)
我也试过只对类或实例有约束.我在两种情况下都有类似的错误.
这有可能吗?或者是否无法为班级成员获得调用堆栈?如果有可能以某种方式获得调用堆栈,它将帮助我更容易地调试一些东西.
与quickcheck如何支持反例类似:
property \x ->
counterexample ("Foo failed with: " ++ ...) $
foo x
Run Code Online (Sandbox Code Playgroud)
但以某种方式与配合使用shouldBe,例如
failDetails (" details: " ++ baz a) $
a `shouldBe` 2
Run Code Online (Sandbox Code Playgroud)
我希望它按照以下方式打印一些内容:
expected: 2
but got: 3
details: ...
Run Code Online (Sandbox Code Playgroud) 是否stack仅在需要时为其他人编译和链接整个项目stack ghci?
它不应该跳过前者并立即跳转到ghci加载源吗?我已经观察到它在我的大多数项目中都为我做,因此它正在做看似多余的工作。这是设计使然,还是我的某些堆栈项目配置错误?
也许这是cabal在没有stack要求的情况下由底层完成的?
无论如何,当我只想输入时,我可以做些什么来跳过编译+链接stack ghci?
如果Nothing在深镜头查找/分配中遇到某个地方,是否可以设置默认值?
例如,查找:
(Just (4, 3), 2) ^. _1 . (maybe (6, 5)) . _1 == 4
(Nothing, 2) ^. _1 . (maybe (6, 5)) . _1 == 6
Run Code Online (Sandbox Code Playgroud)
或者更重要的是,对于作业:
((Just (4, 3), 2) & _1 . (maybe (6, 5)) . _1 .~ 7) == (Just (7, 3), 2)
((Nothing, 2) & _1 . (maybe (6, 5)) . _1 .~ 7) == (Just (7, 5), 2)
Run Code Online (Sandbox Code Playgroud) 从我将Mavericks升级到优胜美地以来,这是我每次启动Terminal.app时都会看到的内容:
dyld: Library not loaded: /usr/local/lib/libpcre.1.dylib
Referenced from: /usr/local/bin/zsh
Reason: image not found
zsh: trace trap
/Users/user/sandbox/repos/zsh-notify/notify.plugin.zsh:55: command not found: add-zsh-hook
/Users/user/sandbox/repos/zsh-notify/notify.plugin.zsh:56: command not found: add-zsh-hook
Run Code Online (Sandbox Code Playgroud)
为了查看权限是否被弄乱了,我检查了
? exp-scotty where zsh
/usr/local/bin/zsh
/usr/local/bin/zsh
/bin/zsh
/bin/zsh
? exp-scotty ll `where zsh`
-rwxr-xr-x 1 root wheel 538K Sep 10 01:19 /bin/zsh
-rwxr-xr-x 1 root wheel 538K Sep 10 01:19 /bin/zsh
lrwxr-xr-x 1 milan admin 27B Oct 28 10:59 /usr/local/bin/zsh -> ../Cellar/zsh/5.0.7/bin/zsh
lrwxr-xr-x 1 milan admin 27B Oct 28 10:59 /usr/local/bin/zsh -> ../Cellar/zsh/5.0.7/bin/zsh …Run Code Online (Sandbox Code Playgroud)