小编typ*_*ris的帖子

守护语法中的逗号有什么作用?

在我正在阅读的代码库中,我发现了一个像这样的函数声明(缺少某些部分):

filepathNormalise :: BS.ByteString -> BS.ByteString
filepathNormalise xs
    | isWindows, Just (a,xs) <- BS.uncons xs, sep a, Just (b,_) <- BS.uncons xs, sep b
    = '/' `BS.cons` f xs
Run Code Online (Sandbox Code Playgroud)

逗号在这里做什么?

(只有作为奖励,如果有人知道这一点:Haskell编程中提到的这个语法是从第一原则开始的,如果是这样的话,在哪里?我记不起来了解它.)

syntax haskell guard-clause pattern-guards

30
推荐指数
1
解决办法
1412
查看次数

`do`和`where`如何混合?

从一些书我有以下代码片段

mutableUpdateIO :: Int -> IO (MV.MVector RealWorld Int)
mutableUpdateIO n = do
  mvec <- GM.new (n + 1)
  go n mvec
  where
    go 0 v = return v
    go n v = (MV.write v n 0) >> go (n - 1) v

mutableUpdateST :: Int -> V.Vector Int
mutableUpdateST n =
  runST $ do
    mvec <- GM.new (n + 1)
    go n mvec
  where
    go 0 v = V.freeze v
    go n v = (MV.write v n 0) >> …
Run Code Online (Sandbox Code Playgroud)

haskell

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

导入语法`import "cryptonite" Crypto.Hash` 中带引号的字符串是什么意思?

如标题所述。有一个代码库,在那里我看到了以下语法

import       "cryptonite" Crypto.Hash
             (Context, Digest, SHA256, hash, hashFinalize, hashInit,
             hashUpdate)
Run Code Online (Sandbox Code Playgroud)

haskell wiki 上的 import上似乎没有提到这种语法。

什么是"cryptonite"串在这里做?

这个语法从何而来?

是 Haskell2010 的一部分,如果是这样,在语言报告中的哪里提到了?

haskell

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

做',gg'(spacemacs/jump-to-definition)之后我怎么回来?

我做到了

, g g
Run Code Online (Sandbox Code Playgroud)

跳到点下相同符号的定义.现在我想回到我之前的文件/位置.

那有约束力吗?

默认spacemacs安装中的绑定是什么?

spacemacs

4
推荐指数
1
解决办法
1125
查看次数

如果我传递不同类型的"Nothing"值,那么`fun ::(SomeTypeClass a)=>结果可能会改变 - >结果`吗?

几乎是标题,但让我们详细说明:

假设我有一些类型的类SomeTypeClass和不同类型A,B,C它们都有一个实例吧.

让我们进一步假设我有一个功能

fun :: (SomeTypeClass a) => Maybe a -> Result
Run Code Online (Sandbox Code Playgroud)

对于某些类型常数Result.

可以表达

  1. fun (Nothing :: Maybe A)
  2. fun (Nothing :: Maybe B)
  3. fun (Nothing :: Maybe C)

某种程度上产生不同的结果

(可能通过一些编译器扩展来提供不同的实现,以fun取决于参数类型或其他东西.)

haskell

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

这个“派生新类型”语法是什么?

从我读过的一篇博客文章

-- | Newtype for disabling logging
newtype NoLoggingT m a
  = NoLoggingT { runNoLoggingT :: m a }
  deriving newtype (Functor, Applicative, Monad)
  deriving (MonadTrans) via IdentityT

instance Monad m => MonadLog (NoLoggingT m) where logLn _ _ = pure ()
Run Code Online (Sandbox Code Playgroud)

那是什么deriving newtype语法?它是哪个扩展名,它有什么作用?请在 anwser 中提供指向其文档的链接。

haskell deriving derivingvia

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