我想得到一个宏的调用类,但我的代码不起作用:
def __CLASS__(c: Context) = {
import c.universe._
c.enclosingClass match {
case ClassDef(mods, name, tparams, impl) =>
c.universe.reify(println(
"\n mods "+c.literal(mods.toString).splice
+"\n name "+c.literal(name.toString).splice
+"\n tparams "+c.literal(tparams.toString).splice
+"\n impl "+c.literal(impl.toString).splice
))
case _ => c.abort(c.enclosingPosition, "NoEnclosingClass")
}
}
Run Code Online (Sandbox Code Playgroud)
在此先感谢您的帮助.
在Monads中,对于自然语言语义学,Chung-Chieh Shan展示了如何使用monad来对一些不同类型的自然语言现象(疑问,焦点,内涵和量化)的标准叙述进行非常均匀的重述.他定义了两个组合操作,A_M并且A'_M对此有用.
第一个是简单的ap.在powerset中monad ap是非确定性函数应用程序,它对于处理疑问句的语义很有用; 在读者monad中,它对应于拉伸成分的通常分析; 等等
这是有道理的.但是,辅助合成操作的类型签名对我来说很奇怪:
(<?>) :: (Monad m) => m (m a -> b) -> m a -> m b
Run Code Online (Sandbox Code Playgroud)
(Shan称之为A'_M,但我会<?>在这里称之为.)定义是你对类型的期望; 它非常接近ap:
g <?> x = g >>= \h -> return $ h x
Run Code Online (Sandbox Code Playgroud)
我想我可以理解这是如何在论文的背景下做到的(处理疑问句的问题动词,作为内容构成等).它的作用并不是非常复杂,但看到它在这里扮演如此重要的角色有点奇怪,因为它不是我之前在Haskell中看到的成语.
Hoogle没有任何有用的东西m (m a -> b) -> m a -> m b或者m (a -> b) -> a -> m b.
这看起来对其他任何人来说都很熟悉吗?你有没有写过这个功能?
通用案例类
case class GroupResult[T](
group: String,
reduction: Seq[T]
)
Run Code Online (Sandbox Code Playgroud)
宏观方法
def foo[T] = macro fooImpl[T]
def fooImpl[T: c.WeakTypeTag](c: Context) = {
import c.universe._
val tpe = weakTypeOf[T]
tpe.declarations.collect {
case m: MethodSymbol if m.isCaseAccessor => println(m.returnType)
}
c.literalUnit
}
Run Code Online (Sandbox Code Playgroud)
当我调用 foo[GroupResult[Int]]
输出是
String
Seq[T]
Run Code Online (Sandbox Code Playgroud)
T不适用?我怎样才能获得申请Seq[Int]?
如何避免使用 Circe json 序列化器将 None 序列化为 null?我无法强制该库跳过“无”的序列化字段。有可能实现吗?
我试着写在Haskell一个简单的程序,它可以决定一个人的身体质量指数.
这是我写的:
type Height = Float
type Weight = Float
type PeopleStats = [(String, Height, Weight)]
Run Code Online (Sandbox Code Playgroud)
和...
bmi :: Height -> Weight -> Float
bmi heightCm weightKg = weightKg/(heightCm)^2
healthy :: Height -> Weight -> Bool
healthy heightCm weightKg | 25 > index && 18 < index = True
| otherwise = False
where index = bmi heightCm weightKg
Run Code Online (Sandbox Code Playgroud)
到目前为止,"健康"功能可以计算某人的BMI,并且功能"healthyPeople"返回一个布尔语句,确定该人的BMI是否落入健康人认为正常的限度内.
我想写一个名为"healthyPeople"的函数.
healthyPeople :: PeopleStats -> [String]
Run Code Online (Sandbox Code Playgroud)
此函数需要获取PeopleStats列表并返回"健康"功能中被视为"健康"的人的名称(字符串)列表.
例如:
如果我输入,[("Lee", 65, 185), ("Wang", 170, 100), ("Tsu", 160, 120)]我将获得一个BMI返回true的人名的列表,形成"健康"中的布尔函数.
请帮忙 …
我想通过使用java和定义依赖关系在集群上分发Docker容器,这样当一个容器完成时,我可以在我的java代码中解析生成的输出.有许多mesos框架可以实现这一点,我不确定采取哪一个:Marathon,Singularity,Chronos,Aurora.
到目前为止我学到了什么:
Marathon有一个非常好的java客户端api,但用于长期任务(不知道这是否是一个问题,因为我的任务不会运行那么久)我不认为我可以定义那种依赖.如果我使用马拉松,我将不得不轮询应用程序的状态.Chronos没有java api(至少我找不到).所以我可以选择Aurora和Singularity.
任何人都可以帮我推荐其中一个用于我的用例.
是否可以让半自动解码器考虑案例类字段的默认值?
以下代码将失败:
Left(DecodingFailure(Attempt to decode value on failed cursor, List(DownField(isActive))))
我认为 circe 会考虑 case class 字段的默认值 isActive
case class Person(
id: Option[Int] = None,
name: String,
isActive: Boolean = true
)
implicit val personJsonDecoder: Decoder[Person] = deriveDecoder
val rawJson = """
{
"name": "Geovanny Junio"
}
"""
val r = for {
j <- parse(rawJson)
p <- j.as[Person]
} yield p
println(r)
Run Code Online (Sandbox Code Playgroud)