小编Cry*_*oob的帖子

打印表达式时最小化括号

我有一个简单的算术表达式数据结构,我希望能够打印。这里为了简单起见,我做了一个例子,其中包含 3 个二元运算,即加法、乘法和除法。定义如下所示:

module ExprPrint where

import Text.Printf

data Expr = Lit Int
          | Add Expr Expr
          | Mul Expr Expr
          | Div Expr Expr

instance Show Expr where
  show (Lit x) = show x
  show (Add e1 e2) = printf "(%s) + (%s)" (show e1) (show e2)
  show (Mul e1 e2) = printf "(%s) * (%s)" (show e1) (show e2)
  show (Div e1 e2) = printf "(%s) / (%s)" (show e1) (show e2)
Run Code Online (Sandbox Code Playgroud)

我的目标是在删除所有多余括号的同时打印数据结构。当然,我上面实现的天真显示功能包括太多了。所以我想要做的是让Show实例考虑操作的优先级(DivMul …

recursion haskell expression arithmetic-expressions

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

如何在 RSA 实例的实例化中使用 Json Web 密钥

我有一个 json web 密钥(https://tools.ietf.org/html/draft-ietf-jose-json-web-key-41),我想用它来用私钥对一些数据进行签名,然后稍后用公钥验证它。我在 .net framework 4.5.1 中使用 c#,我似乎无法使用我拥有的键正确实例化类。我使用这个工具生成了密钥:https : //github.com/mitreid-connect/json-web-key-generator。以下 json 可用,由此我应该能够签名和验证:

{
  "kty": "RSA",
  "d": "rZ_cdME7usL5EavJW1q0cjz8dhfdO9P-E4dacHYFf4I-TN7o-Q0ksfWCb4fpQPghUoz6v2b6-m3IZk4CocmdEAoFH2JqI0PbH5HIBqgva-bE8-elNJIKwza0Hbrw13bRU6KgpOrc9hrX-NcRCTkeKHYtDWGUa2NDB_lNQvkyg-V0NVXf5oSa_cZ9_H4kHPXrzcBeQapn2M_CFb3qfYgVgQb5xU5n67eAcSlztWHIaSaLyu_YAR0SxnEAvWiik1rtSYrEOWsVrPHfHBFwVHluP0g--bedH6kI3mZRI6H_UbmTMnRtxBkCA5mVdzOmsyX2e98MUqIlOeDQ4zB21xSDQQ",
  "e": "AQAB",
  "use": "sig",
  "alg": "RS512",
  "n": "xwHPJaSvKvLqrqb6oeXDL3A4iNgRo5PEQOQCE5zGa6ZWeoC88IuJZxXFJ93wzJk0J22QZJWofC8vV8GAeB3d9mD25koh0dbtb0yoWK-ttWamMIAN4WPiZu30JWzxY1k8LRzOz5lIT9Ze87gV_lgXbpkzQzKFNhxOmV_BhEu1PCLcOTHhic93WQk_E97nYCOwOifmkEFOCBzHEuTG1XHJ1nGEfBCAsdUXrMg_lU3w86TfVDYS6xLVtfVAq4ihDjBsmtPthrdMG4H5Qls8EM-_cbIRe7UEAQK9MgXDLHaQZbx_lQ46_P852SpCprbvqWaoM8zKyEiDf1q6O89D6YIaDw"
}
Run Code Online (Sandbox Code Playgroud)

然后在 C# 中,我有一个包含这些字段的模型,并创建了一个函数来测试我是否可以验证数据:

public class RSAKeyPair
{
    public string kty { get; set; }
    public string e { get; set; }
    public string use { get; set; }
    public string alg { get; set; }
    public string n { get; set; }
    public string d { get; set; } …
Run Code Online (Sandbox Code Playgroud)

.net c# cryptography rsa

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

解析json时构造GADT

我有一个用 GADT 创建的数据结构,我想使用aeson. 但是类型检查器抱怨在所有情况下只能创建 GADT 的构造函数之一。看这个例子:

data Foo = Hello | World

data SFoo :: Foo -> Type where
  SHello :: SFoo 'Hello 
  SWorld :: SFoo 'World

instance FromJSON (SFoo a) where
  parseJSON = withText "Foo" \case
    "hello" -> pure SHello
    "world" -> pure SWorld
Run Code Online (Sandbox Code Playgroud)

所以我希望能够将“hello”字符串解析为SHello,将“world”字符串解析为SWorld. 类型检查器抱怨以下错误:

data Foo = Hello | World

data SFoo :: Foo -> Type where
  SHello :: SFoo 'Hello 
  SWorld :: SFoo 'World

instance FromJSON (SFoo a) where
  parseJSON …
Run Code Online (Sandbox Code Playgroud)

haskell text-parsing gadt aeson

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