小编Ale*_*lec的帖子

在快乐语法中转换/减少冲突

我有以下(严重剥离)快乐的语法

%token
   '{'   { Langle }
   '}'   { Rangle }
   '..'  { DotDot }
   '::'  { ColonColon }
   '@'   { At }
   mut   { Mut }
   ident { Ident }

 %%

 pattern
   : binding_mode ident at_pat  { error "identifier pattern" }
   | expr_path                  { error "constant expression" }
   | expr_path '{' '..' '}'     { error "struct pattern" }

 binding_mode
   : mut                        { }
   |                            { }

 at_pat
   : '@' pat                    { }
   |                            { }

 expr_path
   : expr_path '::' ident …
Run Code Online (Sandbox Code Playgroud)

grammar haskell parser-generator happy ambiguous-grammar

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

有没有办法限制可能的产品类型的实例?

让我们假设这两种总和类型

data Currency =
    | GBP
    | EUR
    | DKK

data Country =
    | DE
    | AT
    | DK
    | UK
Run Code Online (Sandbox Code Playgroud)

和以下产品类型

 type CC = (Country, Currency)
Run Code Online (Sandbox Code Playgroud)

现在即使所有这些国家都是欧盟的一部分(是的,亲爱的软件考古学家从3000年开始 - 英国曾经是欧盟的一部分;-))他们有不同的货币(或不是).所以我想限制的可能值CC,以

 (DE, EUR)
 (AT, EUR)
 (UK, GBP)
 (DK, DKK)
Run Code Online (Sandbox Code Playgroud)

并使其他所有组合都不可表达.
是否有可能在类型级别上表达这样的东西?
如果不是,那么精通Haskeller的方法怎么会这样呢?

haskell types

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

安全记录字段查询

有没有一种干净的方法来避免以下样板:

给定一个记录数据类型定义...。

data Value = A{ name::String } | B{ name::String } | C{}
Run Code Online (Sandbox Code Playgroud)

编写安全返回的函数 name

getName :: Value -> Maybe String
getName A{ name=x } = Just x
getName B{ name=x } = Just x
getName C{} = Nothing
Run Code Online (Sandbox Code Playgroud)

我知道您可以使用Template Haskell做到这一点,我正在寻找一种比这更清洁的解决方案,也许是GHC扩展或其他我忽略的东西。

haskell

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

Scala中类型较高的类型类实例中的两个参数函数,如何将这个简单的Haskell代码转换为Scala?

以下Haskell代码:

main = putStrLn $ "bla " ++ (toStr (A 1) (A 2))
--main2 = putStrLn $ "bla " ++ (toStr (A 1) (A "String")) -- does not compile, as it should
main3 = putStrLn $ "bla " ++ (toStr (A "String") (A "String"))

data A a = A a deriving Show -- (1) data type declaration 

class C a where -- (2) type class declaration
   toStr :: a-> a->String

instance C (A a) where -- (3) instance declaration
   toStr …
Run Code Online (Sandbox Code Playgroud)

haskell scala implicit typeclass

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

haskell:使用不同类型的列表调用函数

我有一个功能:

sum f l1 l2 = (f l1) + (f l2)
Run Code Online (Sandbox Code Playgroud)

使用不同类型的列表调用时如何更正此功能?例如:

sum length [1,2] ['a','b']

polymorphism haskell list

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

匹配Haskell类型类中的类型

如果有人有一个好名字,我不知道怎么说这个,请告诉我.

我正在尝试编写一个名为的类类Matchable.这个想法是我有几种不同类型的正则表达式(RegExp a,ComplexRegex a)应该能够在输入上匹配.

所以我尝试了这个:

class Matchable a where
  --   regex, input, success
  match :: a -> b -> Bool
Run Code Online (Sandbox Code Playgroud)

但我真正想要的是用类型构造函数或其他东西来解构类型类中的构造函数:

class Matchable a where
  --   regex, input, success
  match :: (B a) -> [a] -> Bool
Run Code Online (Sandbox Code Playgroud)

这样我就能得到一个RegExp CharComplexRegex Char两个匹配String.有没有办法做到这一点?谢谢.

haskell typeclass

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

带有类型变量的实例声明

写这样的东西很好:

data Either a b = Left a | Right b

instance Functor (Either a) where
    fmap _ (Left x) = Left x
    fmap f (Right x) = Right (f x)
Run Code Online (Sandbox Code Playgroud)

现在让我说我要反转这个,左边将f应用于值:

instance Functor (Either a) where
    fmap _ (Right x) = Right x
    fmap f (Left x) = Left (f x)
Run Code Online (Sandbox Code Playgroud)

这不编译,我想我需要有类似的东西Functor (Either _ b),我该怎么做?

haskell types functor typeclass bifunctor

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

如何链接 - > IO(mb)函数

有一些签名功能:

a -> IO (m b)
b -> IO (m c)
c -> IO (m d)
Run Code Online (Sandbox Code Playgroud)

我如何将它们链接起来

a -> IO (m d)
Run Code Online (Sandbox Code Playgroud)

实际应用:说有一组REST端点.返回值和下一个值都需要将previous返回的值作为参数.

因此从端点获取的函数如下:

Value1 -> IO (Maybe Value2)
Value2 -> IO (Maybe Value3)
Value3 -> IO (Maybe Value4)
Run Code Online (Sandbox Code Playgroud)

monads haskell types

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

Haskell MTL:如何退出monad并获取其中的值?

我知道如何使用do块内每个monad的函数.但是一旦我完成了如何运行计算并获得结果?

run :: (MonadError Error m, MonadState State m) => m Int -> Int
run = ???
Run Code Online (Sandbox Code Playgroud)

monads haskell typeclass state-monad monad-transformers

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

是否存在可变载体的就地映射函数?

如果我有一个可变向量(IOVector a例如类型),是否有类似地图的函数可以修改元素到位?

vector包提供了该modify功能,但这一次只有一个元素.我应该使用它还是有首选方法?

并且为了澄清,矢量的类型将在之前和之后相同.

haskell vector

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

InstallShield:无法提取索引为0的图标(对于傻瓜)

是的我先做了功课.我仍然被困住了.首先,请允许我对Microsoft弃用Installer项目类型表示不满.他们真丢人.

回到我的问题,这是错误:

Error   3   -3204: Cannot extract icon with index 0 from file <some_path>\obj\Debug\MyProject.Gui.exe.
Run Code Online (Sandbox Code Playgroud)

尝试#1:InstallShield:无法提取索引为0 vb.net的图标

- 答案说在我的exe中包含一个type类型的对象并重建.为此,我尝试了以下方法:

  1. 右键单击我的Windows窗体项目,添加新项目,图标,保存所有

  2. 在步骤1中打开图标文件,在其中绘制一些文本,保存所有文本

  3. 右键单击项目并选择rebuild(没有错误,看起来不错)

  4. 左键单击"指定应用程序数据" - >"文件",在项目中选择*.ico(注意:我可以清楚地看到它,并在对话框中显示为index0)

  5. 左键单击"常规信息" - >"显示图标" - >浏览*.ico(位于MyProject.Gui.exe的项目文件夹中)

  6. 保存所有并重建所有

...我仍然收到相同的错误消息.

如何"重新编译您的EXE以包含图标并且消息将消失"?

c# installer visual-studio-2012 installshield-le

0
推荐指数
1
解决办法
9016
查看次数

如何将show应用于haskell中的任何类型?

我正在尝试编写一个函数来打印列表中任何类型的所有元素(包括我自己的数据类型),但我发现并非所有类型都是show的实例.无论如何可以让haskell知道类型a是/不是show的实例?或者我可以简单地将每种类型转换为字符串.这是我的代码.

displayList :: [a] -> IO()
displayList (x : xs)
    | not (null xs) = (show x) ++ displayList xs
    | otherwise = show x ++ show xs
Run Code Online (Sandbox Code Playgroud)

haskell

-1
推荐指数
1
解决办法
85
查看次数