小编Don*_*ein的帖子

是否可以将GADT存储在State monad变压器中?

假设我有这样的GADT:

data Term a where
  Lit    :: a -> Term a
  Succ   :: Term Int -> Term Int
  IsZero :: Term Int -> Term Bool
  If     :: Term Bool -> Term a -> Term a -> Term a
Run Code Online (Sandbox Code Playgroud)

是否有可能存储Succ (Lit 2)IsZero (Succ (Lit 2))国家单子变压器内部,作为内部状态的值?

这里的问题是这两个是不同类型的,我不知道应该如何键入sof StateT s m a

编辑:ATerm解决了如何GADT在状态中存储不同状态的最初问题,现在的问题是由于类型丢失了,因此似乎无法比较新旧状态。

编辑:最终答案。

在使用@luqui来回切换之后,下面是完整的代码片段,可以回答这个问题。

随意分叉此repl并尝试。

{-# LANGUAGE GADTs #-}
{-# LANGUAGE StandaloneDeriving #-}

import Data.Typeable

data Term a where …
Run Code Online (Sandbox Code Playgroud)

haskell

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

具有部分移动错误的结构

我有一个简单的结构和它的两个实例,如下所示:

#[derive(Debug)]
struct User {
    first: String,
    last: String,
    age: u32,
}

let u1 = User {
    first: String::from("John"),
    last: String::from("Doe"),
    age: 22,
};

let u2 = User {
    first: String::from("Mary"),
    ..u1
};

println!("user: {:#?}", u1);
Run Code Online (Sandbox Code Playgroud)

错误信息:

#[derive(Debug)]
struct User {
    first: String,
    last: String,
    age: u32,
}

let u1 = User {
    first: String::from("John"),
    last: String::from("Doe"),
    age: 22,
};

let u2 = User {
    first: String::from("Mary"),
    ..u1
};

println!("user: {:#?}", u1);
Run Code Online (Sandbox Code Playgroud)

我试图修改它以..&u1希望它能够通过借用检查,以便我可以将基本结构(u1)传播到 u2,但无济于事,想知道我想在这里做什么?

我知道这是因为u1.lastis a …

rust

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

笛卡尔(Profunctor)的例子?

我正在通过以下代码示例,发现很难弄清楚如何使用( - >)和(Star f)一旦他们实现'first'并成为Cartisian的成员.

有人可以提供一些容易理解的例子吗?谢谢.

-- Intuitively a profunctor is cartesian if it can pass around additional
-- context in the form of a pair.

class Profunctor p => Cartesian p where
  first  :: p a b -> p (a, c) (b, c)
  first = dimap swapP swapP . second

  second :: p a b -> p (c, a) (c, b)
  second = dimap swapP swapP . first

instance Cartesian (->) where
  first :: (a -> b) -> (a, c) …
Run Code Online (Sandbox Code Playgroud)

haskell category-abstractions profunctor

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

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

标签 统计

haskell ×3

category-abstractions ×1

profunctor ×1

rust ×1

types ×1