在我正在阅读的代码库中,我发现了一个像这样的函数声明(缺少某些部分):
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编程中提到的这个语法是从第一原则开始的,如果是这样的话,在哪里?我记不起来了解它.)
从一些书我有以下代码片段
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) 如标题所述。有一个代码库,在那里我看到了以下语法
import "cryptonite" Crypto.Hash
(Context, Digest, SHA256, hash, hashFinalize, hashInit,
hashUpdate)
Run Code Online (Sandbox Code Playgroud)
在haskell wiki 上的 import上似乎没有提到这种语法。
什么是"cryptonite"
串在这里做?
这个语法从何而来?
是 Haskell2010 的一部分,如果是这样,在语言报告中的哪里提到了?
我做到了
, g g
Run Code Online (Sandbox Code Playgroud)
跳到点下相同符号的定义.现在我想回到我之前的文件/位置.
那有约束力吗?
默认spacemacs安装中的绑定是什么?
几乎是标题,但让我们详细说明:
假设我有一些类型的类SomeTypeClass
和不同类型A
,B
,C
它们都有一个实例吧.
让我们进一步假设我有一个功能
fun :: (SomeTypeClass a) => Maybe a -> Result
Run Code Online (Sandbox Code Playgroud)
对于某些类型常数Result
.
可以表达
fun (Nothing :: Maybe A)
fun (Nothing :: Maybe B)
fun (Nothing :: Maybe C)
某种程度上产生不同的结果
(可能通过一些编译器扩展来提供不同的实现,以fun
取决于参数类型或其他东西.)
从我读过的一篇博客文章
-- | 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 中提供指向其文档的链接。