小编Cac*_*tus的帖子

Haskell模式匹配 - 如何使用常量变量

我最好写这样的东西:

myValue1 = 1 :: Int
myValue2 = 2 :: Int

myFunc :: Int -> Bool
myFunc myValue1 = True
myFunc myValue2 = False

致电myFunc myValue2回报True- 不是我想要的.我知道为什么会发生这种情况,但有没有办法在Haskell中表达这一点而不诉诸C风格的#define语句?

haskell pattern-matching

18
推荐指数
4
解决办法
4028
查看次数

在C++中调用私有方法

这纯粹是一个理论问题,我知道如果有人声明私有方法,你可能不应该调用它.我设法调用私有虚方法并更改实例的私有成员,但我无法弄清楚如何调用私有非虚方法(不使用__asm).有没有办法获得指向该方法的指针?有没有其他方法可以做到这一点?

编辑:我不想改变类定义!我只想要一个黑客/解决方法.:)

c++

17
推荐指数
3
解决办法
3万
查看次数

弹性搜索字段之间的比较

假设我有以下字段的文档: {field1, field2, ... fieldn}

我需要运行一些查询,其中一些条件需要在两个或多个字段之间进行比较.喜欢fieldX = fieldY

在标准SQL中,示例可以是:

SELECT * FROM Table1 WHERE farePrice>100 AND originRegion = destinationRegion 
Run Code Online (Sandbox Code Playgroud)

我一直在阅读一些文档,看起来"脚本"可能是实现这一目标的唯一方法吗?或者还有其他选择吗?

elasticsearch

17
推荐指数
1
解决办法
2万
查看次数

如何在Shake中编写定点构建规则,例如Latex

使用Shake Haskell构建库,如何使用需要达到固定点的程序编写规则?想象一下,我有一个程序foo,它接受一个文件input并生成一个输出文件,应该foo重复应用,直到输出文件没有改变.我怎么能在Shake中写出来?

这种模式的典型例子是LaTeX.

haskell shake-build-system

16
推荐指数
1
解决办法
952
查看次数

将单个记录字段更改为严格会导致性能下降

我有一个程序使用haskell-src-exts,并提高性能我决定严格记录字段.这导致了更糟糕的表现.

这是我正在改变的完整模块:

{-# LANGUAGE DeriveDataTypeable, BangPatterns #-}
module Cortex.Hackage.HaskellSrcExts.Language.Haskell.Exts.SrcSpan(
    SrcSpan, srcSpan, srcSpanFilename, srcSpanStartLine,
    srcSpanStartColumn, srcSpanEndLine, srcSpanEndColumn,
    ) where

import Control.DeepSeq
import Data.Data

data SrcSpan = SrcSpanX
    { srcSpanFilename    :: String
    , srcSpanStartLine   :: Int
    , srcSpanStartColumn :: Int
    , srcSpanEndLine     :: Int
    , srcSpanEndColumn   :: Int
    }
  deriving (Eq,Ord,Show,Typeable,Data)

srcSpan :: String -> Int -> Int -> Int -> Int -> SrcSpan
srcSpan fn !sl !sc !el !ec = SrcSpanX fn sl sc el ec

instance NFData SrcSpan …
Run Code Online (Sandbox Code Playgroud)

haskell

16
推荐指数
1
解决办法
526
查看次数

将函数转换为无点样式会更改其类型

我正在开始Haskell ...我尝试用两种不同的方式编写以下简单的函数,让Haskell决定类型,类型系统在每种情况下都做了不同的事情.这种行为的解释是什么?

Prelude> let f x = 2 * x
Prelude> let g = (2*)
Prelude> :info f
f :: Num a => a -> a    -- Defined at <interactive>:1:5
Prelude> :info g
g :: Integer -> Integer     -- Defined at <interactive>:1:5
Run Code Online (Sandbox Code Playgroud)

谢谢!

haskell types monomorphism-restriction

15
推荐指数
1
解决办法
1227
查看次数

产品和副产品在邮政

在阅读Bartosz 为程序员提供的优秀类别理论时,我陷入了第二个练习,即第二个练习,它处理了网络中的产品.鉴于一个poset,

    b   e
  ?   ?   ?
a ? c   f ? h
  ?   ?   ?
    d   g
Run Code Online (Sandbox Code Playgroud)

如何在分类意义上定义产品?什么是两个对象的产品分类?那副产品呢?

product category-theory poset

15
推荐指数
1
解决办法
1278
查看次数

如何在haskell中构成"更自由"的效果?

我试图从基于变换器的monad堆栈重写一个简单的解释器到基于更自由的效果,但是我正在努力将我的意图传达给GHC的类型系统.

我目前只使用StateFresh效果.我正在使用两种状态,我的效果运动员看起来像这样:

runErlish g ls = run . runGlobal g . runGensym 0 . runLexicals ls
  where runGlobal    = flip runState
        runGensym    = flip runFresh'
        runLexicals  = flip runState
Run Code Online (Sandbox Code Playgroud)

最重要的是,我已经使用以下类型定义了一个函数FindMacro:

findMacro :: Members [State (Global v w), State [Scope v w]] r
             => Arr r Text (Maybe (Macro (Term v w) v w))
Run Code Online (Sandbox Code Playgroud)

到目前为止所有这一切都完美无缺.当我尝试编写时出现问题macroexpand2(好吧,macroexpand1,但我正在简化它,所以问题更容易理解):

macroexpand2 s =
  do m <- findMacro s
     return $ case m of
       Just j -> True
       Nothing -> False …
Run Code Online (Sandbox Code Playgroud)

haskell effect-systems

15
推荐指数
1
解决办法
678
查看次数

在GHCi中键入Family Shenanigans

这是我的代码:

{-# LANGUAGE TypeFamilies, TypeOperators, DataKinds, PolyKinds, FlexibleContexts, UndecidableInstances #-}

module Foo where

import Data.Singletons.Prelude
import Data.Type.Equality

data TP a b

-- foldl (\(bool, r) x -> (bool && (r == x), r)) (True, head xs) xs
type family Same (b :: Bool) (r :: k) (rq :: [k]) :: k where
  Same bool r (x ': xs) = Same (bool :&& (r == x)) r xs
  Same bool r '[] = TP bool r

data NotEqualFailure
-- converts a …
Run Code Online (Sandbox Code Playgroud)

haskell ghc

14
推荐指数
1
解决办法
266
查看次数

模式同义词导致无穷无尽的模式匹配

我设法构建了以下显示我的问题的"最小"示例.

如果启用了PatternSynonyms扩展

data Vec = Vec Int Int

pattern Ve x y = Vec x y

f :: (Vec, Vec) -> Vec
f (v@(Ve a b), Ve c d)
    | a > b     = Vec c d
    | otherwise = v
Run Code Online (Sandbox Code Playgroud)

我得到了f函数的警告

  Warning: Pattern match(es) are non-exhaustive
  In an equation for `f': Patterns not matched: (_, _)
Run Code Online (Sandbox Code Playgroud)

如果我VeVec它替换每一个都不会抱怨.我的奇异模式同义词如何干扰这里?

haskell pattern-matching pattern-synonyms

13
推荐指数
1
解决办法
551
查看次数