尝试在IntelliJ中构建Kotlin / Ktor应用程序时,出现以下形式的多个警告
Warning:(276, 6) Kotlin: This class can only be used with the compiler argument '-Xuse-experimental=kotlin.Experimental'
Run Code Online (Sandbox Code Playgroud)
输出。警告是指
@UseExperimental(KtorExperimentalLocationsAPI::class)
Run Code Online (Sandbox Code Playgroud)
所以预期通过设定以满足警告设置- >构建- >编译器- >科特林编译器- >附加的命令行参数来-version -Xuse-实验= kotlin.Experimental。(-version已经在那里)。但是仍会生成警告。我如何满足呢?谢谢您的期待。
这个问题更能帮助我理解Yesod而不是其他任何东西.以http://www.yesodweb.com/book/basics为例,特别是mkYesod TH函数生成的代码.
我认为的问题是这个TH生成路由数据类型(数据路由HelloWorld = HomeR)和调用getHomeR等的yesodDispatch函数.
难点在于,在较大的项目中,您不能将getHomeR的定义拆分为单独的模块,因为Haskell的简单模块系统是严格分层的; 因此,如果getHomeR简称getHomeRimplementation这是在另一个模块中定义(比如HomeImplementation),那么该模块将需要导入的定义数据路由的HelloWorld和将有循环依赖关系.
在我看来,如果可以在单独的模块中声明RenderRoute,ParseRoute和YesodDispatch实例,则可以避免这种情况; 然后RenderRoute可以位于导入层次结构的底部,而YesodDispatch位于顶部.那有意义吗 ?也许我问这个问题的事实表明我对mkYesod TH 不了解 ; 例如,存在一些重要的相互关系,它们不应该分开.
我想编写一个函数,它接受两个Maybe Int参数,如果它们都是Just number,则返回它们中的最小值,如果其中一个是 ,则返回“另一个” Nothing。我对我的第一次尝试不满意:
maybeMin :: Maybe Int -> Maybe Int -> Maybe Int
maybeMin Nothing arr = arr
maybeMin ell Nothing = ell
maybeMin ell@(Just l) arr@(Just r) = if l < r then ell else arr
Run Code Online (Sandbox Code Playgroud)
作为优化,我不想在第三种情况下创建新值;即,我不想写
maybeMin ell@(Just l) arr@(Just r) = Just $ if l < r then l else r
Run Code Online (Sandbox Code Playgroud)
上面的代码看起来很笨拙,在我看来,我应该能够利用, orMaybe的实例这一事实。然而,我最好的尝试去高阶并没有做同样的事情:FunctorApplicativeMonad
maybeMin ell arr = ell >>= (\l -> arr >>= (\r -> …Run Code Online (Sandbox Code Playgroud)