小编ais*_*ais的帖子

为什么nameof只返回姓氏?

nameof(order.User.Age)仅返回"Age"而不是"order.User.Age"

以更有限的方式做到这一点的原因是什么?如果我们只想要姓氏,我们可以做类似的事情

public static GetLastName(this string x) { 
    return string.Split(x, '.').Last();
}
nameof(order.User.Age).GetLastName()
Run Code Online (Sandbox Code Playgroud)

有了一个操作员,我们可以同时获得"Age"和"order.User.Age".但是根据目前的实施情况,我们只能获得"年龄".

这个决定背后有一些逻辑吗?

编辑:例如,这种行为是MVC绑定所必需的

Html.TextBox(nameof(order.User.Age))
Run Code Online (Sandbox Code Playgroud)

.net c#-6.0 nameof

31
推荐指数
5
解决办法
9139
查看次数

Tree Functor和Foldable但有节点.对它有任何概括吗?

data Tree t = Empty | Node t (Tree t) (Tree t)
Run Code Online (Sandbox Code Playgroud)

我们可以创建Functor实例并使用

fmap :: (t -> a) -> Tree t -> Tree a
Run Code Online (Sandbox Code Playgroud)

但是如果不是(t - > a)我想要(树t - > a)那么我可以访问整个(节点t)而不仅仅是t

treeMap :: (Tree t -> a) -> Tree t -> Tree a
treeMap f Empty = Empty
treeMap f n@(Node _ l r) = Node (f n) (treeMap f l) (treeMap f r)
Run Code Online (Sandbox Code Playgroud)

与折叠相同

treeFold :: (Tree t -> a -> a) -> a -> Tree t -> a …
Run Code Online (Sandbox Code Playgroud)

haskell functor comonad foldable

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

是否可以将两棵树与递归方案进行比较?

我有这个AST

data ExprF r = Const Int | Add   r r
type Expr = Fix ExprF
Run Code Online (Sandbox Code Playgroud)

我想比较一下

x = Fix $ Add (Fix (Const 1)) (Fix (Const 1))
y = Fix $ Add (Fix (Const 1)) (Fix (Const 2))
Run Code Online (Sandbox Code Playgroud)

但是所有递归方案函数似乎只适用于单一结构

显然我可以使用递归

eq (Fix (Const x)) (Fix (Const y)) = x == y
eq (Fix (Add x1 y1)) (Fix (Add x2 y2)) = (eq x1 x2) && (eq y1 y2)
eq _ _ = False
Run Code Online (Sandbox Code Playgroud)

但我希望可以使用某种zipfold功能.

tree haskell abstract-syntax-tree catamorphism recursion-schemes

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

为什么我们必须使用状态monad而不是直接传递状态?

有人可以展示一个简单的例子,其中状态monad可以比直接传递状态更好吗?

bar1 (Foo x) = Foo (x + 1)
Run Code Online (Sandbox Code Playgroud)

VS

bar2 :: State Foo Foo
bar2 = do
  modify (\(Foo x) -> Foo (x + 1))
  get
Run Code Online (Sandbox Code Playgroud)

monads haskell state-monad purely-functional

10
推荐指数
2
解决办法
1813
查看次数

我们可以用Alternative做什么,但不能用Monoid做什么?

我读了为什么MonadPlus而不是Monad + Monoid?我理解理论上的差异,但我无法弄清楚实际的差异,因为对于List来说它看起来是一样的.

mappend [1] [2] == [1] <|> [2]
Run Code Online (Sandbox Code Playgroud)

是.也许有不同的实现

mappend (Just "a") (Just "b") /= (Just "a") <|> (Just "b")
Run Code Online (Sandbox Code Playgroud)

但我们可以像Alternative一样实现Maybe Monoid

instance Monoid (Maybe a) where
  Nothing `mappend` m = m
  m `mappend` _ = m
Run Code Online (Sandbox Code Playgroud)

那么,有人可以展示代码示例,它解释了Alternative和Monoid之间的实际区别吗?

问题不是为什么MonadPlus而不是Monad + Monoid?

monads haskell monoids

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

有没有办法分离无限和有限列表?

例如,我正在为列表编写一些函数,我想使用长度函数

foo :: [a] -> Bool
foo xs = length xs == 100
Run Code Online (Sandbox Code Playgroud)

有人能理解这个函数是否可以与无限列表一起使用?

或者我应该总是考虑无限列表并使用这样的东西

foo :: [a] -> Bool
foo xs = length (take 101 xs) == 100
Run Code Online (Sandbox Code Playgroud)

而不是直接使用长度?

如果haskell将具有FiniteList类型,那么长度和foo将是什么

length :: FiniteList a -> Int
foo :: FiniteList a -> Bool
Run Code Online (Sandbox Code Playgroud)

haskell list infinite

8
推荐指数
2
解决办法
254
查看次数

Functor产品和副产品的有用应用

你能展示一个简单的代码示例,它会显示Data.Functor's ProductCoproduct?的有用应用吗?

haskell functor category-theory

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

有没有办法默认使用JavaScript属性?

我只是想以某种方式说"我希望这个项目中的所有方法都使用[JavaScript]"手动注释每个方法都很烦人

f# websharper

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

找不到类似liftM2的功能

myLiftM2 ::  Monad m => (a -> a1 -> m b) -> m a -> m a1 -> m b
myLiftM2 f x y = x >>= (\r1 -> y >>= (\r2 -> f r1 r2))
Run Code Online (Sandbox Code Playgroud)

在liftM2中f返回b,但myLiftM2返回mb

monads haskell

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

如何获取具有映射类型的对象类型的可选部分?

例如我有这种类型

type Foo = {
    foo?: number
    bar: string
    obj?: {
        qwe?: number
        asd: string
    }
}
Run Code Online (Sandbox Code Playgroud)

我想要一个类型

type Foo2 = {
    foo: number
    obj: {
        qwe: number
    }
}
Run Code Online (Sandbox Code Playgroud)

我试过这个

type OptionalKeys<T> = {[P in keyof T]: T[P] extends undefined ? P : never }[keyof T]

type PickOptionalProperties<T> = {
    [P in OptionalKeys<T>]-?: PickOptionalProperties<T[P]>
};
type Foo2 = PickOptionalProperties<Foo>  
const o: Foo2 = {
}
Run Code Online (Sandbox Code Playgroud)

但它不起作用,我不知道为什么

typescript mapped-types

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