我想在我的Elm程序中结合两种数据结构。它们的类型是List(a,List b)和List c。这是在模型中存储数据的最简单方法,但我想编写一个函数,在显示数据之前将其转换为视图模型
type alias Model1 a b = List (a, List b)
type alias Model2 c = List c
type alias ViewModel a b c = List (a, List (b, c))
toViewModel : Model1 -> Model2 -
我试图在满足条件时从记录列表中返回一条记录。
现在,当条件为false时,我返回一个带有空字段的记录
这样行吗?
有更好的办法吗
xs =
[ { name = "Mike", id = 1 }
, { name = "Paul", id = 2 }
, { name = "Susan", id = 3 }
]
getNth id xs =
let
x =
List.filter (\i -> i.id =
有没有办法知道滚动条是否位于Elm中元素的底部?我正在使用Dom.Scroll.toBottom在添加列表项时滚动到列表的底部。如果不去管它,效果会很好。但是如果你手动向上滚动一点,我不想再自动向下滚动到底部(除非你再次手动滚动到底部)。否则,您将无法查看前面的列表项。我可以使用以下代码获得clientHeight、scrollHeight和scrollTop属性。要知道卷轴是否位于元素的底部,这些是必需的。代码的其余部分仅在scroll已位于底部时实现自动滚动的机制:
类型别名模型=
{消息:
我希望下面的代码在打开和关闭计时器时异步增加计数。但它总是同步工作(增量为2)
如何使其异步
编辑:可能是由于我的英语能力不足,这个问题似乎经常被误解。我希望实现的行为与我的答案完全相同。关键是,两个计时器应该通过切换分别增加计数
解决这个问题的方法如下,但这当然是不可取的。我想尽可能多地使用其他解决方案。请为我提供可靠的方法
import Html exposing (program, div, button, text)
import Html.Events exposing (onClic
标签: Elm
type-aliasunion-types
我一直在阅读,我看到了很多类似的事情:
type Username
= Username String
type alias Username
= String
我不确定使用这样的东西是否有意义,单值联合类型,而不是像这样的类型别名:
type Username
= Username String
type alias Username
= String
什么时候使用单值联合类型与只使用类型别名是合适的?对于什么时候合适没有硬性规定,但我倾向于遵循一些经验
无法理解如何在视图模块中使用导入的样式化组件。以下是组件本身:
module Logo exposing (logo)
import Css exposing (..)
import Html
import Html.Styled exposing (..)
import Html.Styled.Attributes exposing (css, src)
theme : { secondary : Color, primary : Color }
theme =
{ primary
我是ELM新手,我想创建一个不使用任何库(如Bootstrap或ELM-UI)的模式。我在网上找到了这个简单的例子,它也使用JSON解码。有没有可能在没有任何框架/库和JSON解码的情况下让模态工作?如何修改代码以获得工作模式
module Main exposing (main)
import Browser
import Html exposing (Html, Attribute, button, div, span, text)
import Html.Events exposing
我刚刚开始研究Elm,并打算用它构建一个简单的web应用程序。我的想法是在浏览器中保存一些用户数据
有没有一种直接使用Elm处理数据持久性的方法?例如,在浏览器会话中,甚至在本地存储中?或者我应该使用端口来使用JavaScript吗?您可以看看。它使在本地存储中存储数据成为可能。我建议使用本地存储。在最新的elm中没有对它的官方支持(此时它是0.17),但是您可以通过端口简单地实现它。这是一个通过elm 0.17的端口使用localStorage的工作示例(基于官方文档中的示例)
port mo
我正在使用start app塑造我的应用程序Html.Events支持使用自定义Signal.message创建自定义事件。但是如何发送该消息被抽象在Html库后面。还有一个名为的库,它实现了去Bouncing()
SearchBar.elm:
module PhotosApp.SearchBar (view) where
import Html exposing (input, div, button, text, Html)
import Html.Events exposing (on,
为什么不公开任何过滤器函数?如果有一个类似于filterMap:(a->Maybe msg)->Sub a->Sub msg的函数来监听某些按键上的事件,而不是其他按键上的事件,那将非常方便
这个功能可以用另一种方式实现吗?这是一个好主意吗?虽然我不能说它的缺失(filterMap似乎很合理),但您可以在更新函数之前进行筛选/映射,并在筛选返回Nothing时映射到NoOp消息:
导入
你的过滤器功能:Msg->Maybe Msg
yourFilterFunction=。。。
主要=
Html.
如何导航到Elm应用程序中的其他页面
具体来说,我正在尝试从主页导航到贡献者页面
“参与者”页面位于“我的域”文件夹下
文件结构如下:
- Home.elm
- Domain
- Contributor.elm
我想我可以这样做:
a [href "Domain/Contributor.elm"] [text "click me!"]
或者这个:
a [href "Domain/Contributor.html"] [text "click me!"]
但是,这两条路径都不起作用
注:
我在Elm开始了我的第一个简单的web应用程序。我的大部分代码目前都是从中改编的。我正在使用一个API,该API将在响应头中为我提供一个authToken。我有一个AuthToken类型,应该表示该令牌。从标头中取出值并将其转换为错误String或AuthToken的结果会导致问题。我希望我可以说我正在返回一个AuthToken,返回一个字符串,这会很好,因为我的AuthToken现在只是字符串。很明显,我对榆树的类型有些不了解
以下是AuthToken的定义:
type AuthToken
您好,我正在努力使用Elm获取JSON的根。
所有示例都显示了对嵌套[{info here}]的解码
如果在Elm站点上找到的邮政编码示例是JSON的根,它会是什么样子?{“邮政编码”:“我想要这个”}
http->解码Json(一个字符串“post code”)->到主输出的步骤是什么
谢谢找到这个花了一段时间。
但是它看起来像这样你可能已经拥有了它,但你需要它
http.get ("post code" := string) url
|> Task.maybe
|>
我尝试合并两个信号。一个是Mouse.clicks,另一个是Keyboard.space
单击时,我应该从Mouse.position获得一个信号(Int,Int)作为返回值
在太空中,我应该得到一些不同的东西,这样我可以识别不同的信号被触发
我的想法是:
type Event=单击|空格
合并信号:信号事件
合并信号=
让
clickSignal=映射(\event->Click)鼠标。单击
timeoutSignal=map(\event->Space)Keyboard.Space
在里
给定一个字符串列表,我想创建一个HTML div列表,以便在视图中插入它:
我想知道函数签名应该如下所示:
display : List String -> List Html div
以及职能机构:
display model = case model of
[] -> []
(x::xs) -> div [][ text x] :: display xs
当按照以下步骤将上述函数嵌入视图时(我知道div函数将Html列表作为第二个参数div
我正在寻找类型为(a->b->c->d)->c->a->b->d的函数。换句话说,一个函数可以部分地将第三个参数应用于一个函数
有没有一个图书馆有这样的功能?制作一个或向其中一个elm社区库(可能是elm function extra)中添加这样的函数对我有用吗?我不相信存在具有该函数的库,但定义它很简单:
f:(a->b->c->d)->c->a->b->d
f fn c a b=
fn a b c
关于它是否属于社区图书馆的问题,最好在社区图书馆中进行讨论
我在Hoogle上找不到等效的H
在LightTable编辑器中,它看起来是一个很好的elm插件,但我无法使它在Windows上正常工作。当我尝试执行此操作时,会出现以下错误:Path必须是字符串。接收到空值
请帮助…避免在通往elm平台的道路上出现空格
在Windows命令提示符中键入echo%path%,以检查Elm路径
如有必要,请在另一个文件夹中卸载并重新安装elm
避免在通往LightTable的道路上出现空格
如有必要,请移动LightTable文件夹
在新位置卸载并重新安装elm插件
安装elm oracl
我有一个需要按顺序运行的Cmd Msgs列表。我目前使用的是Cmd.batch list,但它们似乎都是同时运行的,因此应该稍后运行的命令不知道早期命令应该引入的模型的任何更改
我正在研究任务。然后,但不确定这是否是正确的方向,或者如何从任务中生成Cmd Msg。我是否走对了道路,或者有更好的方法来实现这一点,也许仍然使用Cmd.batch
我目前有两个函数receive:String->Model->Cmd Msg和processMsg:String->Model->Cmd Msg:
rece
我一直在尝试将Elm 0.16代码转换为0.18。然而,我似乎无法获得Http.get,我必须工作
旧代码是:
fetch : Decoder a -> String -> (Result Http.Error a -> b) -> Effects b --Effects became Cmd in 0.17
fetch decoder url action =
Http.get decoder url
|> Task.toResult
|&
如果我记录一个函数:
Debug.log "List.foldl" (toString List.foldl)
<function> : a -> a
Debug.log“List.foldl”(toString List.foldl)
:a->a
我得到了它的函数签名。如何获取函数体?接受两个参数:字符串和任意变量。这两个参数都将被打印出来,并且第一个参数应该被用作一个简单的描述,说明您正在向日志发送什么
在您的情况下,可能是:
Debug.log "List.foldl
好的,首先请看下面的帖子:
我更好奇的是,这实际上是怎么可能的,因为这使得记录实际上是一个变量,函数编程试图避免的事情
我的旧帐单怎么了?有人基本上删除了我的x=4,并制作了一个新的x=boo\u far?函数式编程避免了变异。在Elm中,记录不是变异的,而是复制的
即使说它们是复制品也有点失实。它们不是逐字节完全克隆的。这将是非常低效的。它们的内部结构更像图形,允许高效的基于指针的操作,在执行复制到新记录的操作时,这些操作可以有效地扩展底层结构,而不会改变现有的节点和边
从概念上讲,这样想可
我正在尝试根据用户输入在Elm应用程序之间动态切换
这两个应用程序都通过elm make在js文件中传输(例如:Foo.js暴露模块Foo和Bar.js暴露模块Bar)
两个按钮运行通常的“Elm.[Foo | Bar].init(节点:document.querySelector('main')”,因此理论上我可以在呈现两个应用程序之间切换
需要明确的是,这两个应用程序应该交替接管该元素
当我第一次点击其中一个按钮时,应用程序会正确呈现,但第二次点击会产生以下错误
Error: What
我有一个在Elm中运行的应用程序。
在“IE兼容”模式下加载应用程序之前,我需要向用户显示一些警报消息,因为我不打算支持,只针对IE兼容模式
用JavaScript我可以做到
navigator.userAgent.indexOf('compatible') > -1 ? true : false
但是在ELm-it-self中有没有一种方法可以做到这一点,就像Main.init中的第一件事一样
我曾尝试使用Elm端口,但应用程序本身在到达端口之前失败,这就是为什么在任何Elm代码运行之
例如输入
["a", "b", "b", "c", "a"]
将导致输出
[("a", 2), ("b", 2), ("c", 1)]
在elm中,我真的想不出一种功能性的方法来实现这一点。如果您可以使用,那么您可以映射该功能的结果以满足您的需要:
import List.Extra
List.map (\(x, y) -> (
1) 我真的不知道元素和表单是为了什么目的而不同的类。可能会导致以下问题
(二)
Mymain函数将所有信号映射到一个Assembly函数,该函数在每次更新时组装视图
assemble: Float -> Float -> Element
assemble screen_w screen_h =
[
background screen_w screen_h,
header screen_w screen_h,
info scre
我在查看elm表单包文档时发现了以下代码:
字段“myfield”(int`and`minInt 10)
这些引语是什么意思?这是应用函数的另一种方式吗?这是一种将任何函数用作中缀的方式,如3+5
但是:它已在elm 0.18中删除:
我试图在单页应用程序中实现无散列URL(如/somePage)
我现在正在使用onPreventDefaultClickfrom,以防止锚链接刷新代码中我的elm部分中单击时的页面
问题是,我在页面上嵌入了一个javascript编辑器。而且,在那里也会有数量不可预测的链接(链接到应用程序上具有不同URL的不同功能)。如何防止他们刷新页面。但也允许他们运行命令并在之后更改url
这对于像/#/somePage这样的散列URL来说很容易。在当前的实现中,我只是在代码的JS/editor部分的锚定标
Elm版本:0.19.1
有没有一种方法可以使用项目元数据UTIL或其他工具/解决方案在Elm项目中进行一些元编程?简单的东西,比如获取自己的文件名,获取自己的文件目录,然后在我的elm应用程序中使用
我想要的是这样的:
moduleName : String
moduleName = MetaData.moduleName
从根本上说,Elm不提供对此类信息的访问,因为没有反射API,因此在Elm中没有一种好方法可以完全做到这一点。您可以尝试使用Ports和JS,但如果您谈论的是Elm源代码
编写一个函数,将一个列表拆分为两个列表。第一部分的长度由调用方指定。
我是Elm的新手,所以我不确定我的推理是否正确。我认为我需要转换数组中的输入列表,以便能够根据提供的输入编号对其进行切片。我在语法方面也有点困难。以下是我目前的代码:
listSplit: List a -> Int -> List(List a)
listSplit inputList nr =
let myArray = Array.fromList inputList
in Array.slice
考虑一下这个计划:
import Graphics.Element exposing (..)
import Debug
main : Element
main =
let
one = Debug.log "one" 1
two = Debug.log "two" 2
three = Debug.log "three" 3
in
show "Hello"
它将以下内容打印到浏览器控制台:
three: 3
two: 2
one: 1
为什么顺序颠倒
你能给我解释一下Elm next语句的意思吗
(=>) = (,)
我在中缀符号的例子中找到了它。实际上,这定义了一个函数
(=>) = \a b -> (a,b)
然后使用中缀而不使用括号,因此
a => b == (a,b)
嗨,事实上,我是通过玩这个例子来了解自己的。但无论如何,谢谢你的回答,这是非常有帮助的!那你能把问题标上句号吗
我是榆树的初学者。这是一个关于风格的问题,而不是某样东西是如何运作的
例如,我们有
viewValidation:Model->Html msg
我知道这样做是为了viewValidation model可以与Html Msg类型的值共存于同一列表中。但是,既然msg这里只是一个类型变量,为什么不使用更传统的a
msg打算传达哪些额外信息?Elm体系结构鼓励一致地命名类型,如Model和msg,以传达其含义。使用小写字母msg只会让我们更清楚地了解其意图
它很可能被命名为a,但可以说它并没有传达
如何在Elm中检测图像加载失败
我使用img[src”/path/to/image“]并想知道映像是否加载失败。
在plan old JavaScript中,我会注册到img事件的onError,但在Elm中我看不到onError。您可以用来捕获图像加载错误
您需要一个Msg值来指示映像失败。这里我将其称为ImageError:
img[src”/path/to/image,在“error”(Json.Decode.succeed-ImageError)上
在这种情况下,Json.Decode
我正在尝试构建一个通用映射函数,该函数将从联合类型中提取一个可能的内部类型,对内部值应用一个转换,并将其映射回外部类型
问题是,我需要一种方法来区分外部类型的特定值是否有内部类型
如果下面的代码真的编译了,这对我来说是可行的,但是Elm不允许模式匹配中使用常量。(第4行的构造函数编译失败)
有没有其他方法可以做到这一点
map : (inner -> outer) -> (inner -> inner) -> outer -> outer
map construct
我想看看给定列表的长度是否等于某个数字。然而,=期望两个数字不是Int,所以即使我键入(==)1类型仍然是数字->Bool,所以最后当我输入长度的结果时,我得到编译错误:
--类型不匹配-------------------------------------------REPL
此函数无法处理通过(|>)管道发送的参数:
4| List.length |> ((==) 1)
^^^^^^
理由是:
List a -> Int
但是(
我想使用Elm制作一个web应用程序,该应用程序将包含一些视频元素,具有动态布局,可以根据浏览器的宽度和高度进行更改。当我尝试这样做时,很明显Elm正在为视频生成新的元素,但这不起作用,因为视频元素具有需要保留的状态
为了简单起见,我用计数器而不是视频来演示这个问题。我试图解决Html.lazy和Keyed.node的问题,但问题仍然存在
这里的代码也可以从中克隆
src/Main.elm:
port module Main exposing (..)
import Browser
impor
基本上,我试图从两个UNIX时间戳的差值创建一个倒计时
我的目标是创建这样的倒计时:130:04:23,其中130是小时,04是分钟,23是两个日期之间的秒
toCountDown : Time.Posix -> Time.Posix -> String
toCountDown now end =
let
differenceMillis =
Time.posixToMillis end - Time.posixToMillis now
我在Elm中玩,每当我使用Elm make时,我都会从Windows脚本主机收到一个错误:
该错误表示build elm.js文件中存在错误。当我看到给定的一行时,它如下所示:
return {
keys: keys, // A hash of key name to index
free: free, // An array of unkeyed item indices
} // line 10547
所以我猜它在抱怨10546行不必要的,:免费:免费,
考虑以下几点。为什么它不起作用。我怎样才能让它工作呢
输入字符串
=字符串
|Int
getInt:IntOrString->String
getInt-intOrString=
关于……的情况
字符串->
入串
Int->
串入串
您对IntOrString类型的声明似乎表明您想要一个可以包含整数或字符串的类型。然而,这不是你所创造的。我建议阅读Elm指南中的
声明联合类型时,必须创建构造函数。在您的示例中,您实际上创建了一个具有两个构造函数的类型,这两个构造函数都不包含参数,因此尽管您将它们
我想知道应用程序的型号何时会改变
具体来说,像这样的代码是否保证是正确的
onClick我被告知,从0.18开始:
视图通过requestanimationframe异步渲染,因此,不,它不安全
而且:
在0.19中,html事件将触发同步重新渲染器,因此这不会成为问题
最后:
Requestanimationframe以60fps的速度运行,因此使用过时模型发送事件的窗口非常小
i、 e.最多16毫秒,假设您的视图可以在单个帧内渲染(如果不能,这是另一个问题)
因此,在这种情况下,我建议尽可能
我是埃尔姆的新手。Elm版本为0.19。我正在尝试使用Ranndom.int来选择船舶类型,但不知道如何操作。
我应该如何处理函数numToShip?改变类型
这是我的密码
type ShipType
= Battleship
| Cruiser
| Destroyer
| Submarine
numToShip : Int -> ShipType
numToShip num =
case num of
0 -> Destr
我是新创建elm应用程序的
我需要通过路由到的反向代理运行elm app start
但是,这需要链接(例如到css和js)引用/myprefix/*
对于elm应用程序构建,这可以通过
PUBLIC\u URL=myprefix elm应用程序构建
但是,对于startPUBLIC\u URL=myprefix elm app start这不起作用,即链接引用/改为指向/myprefix
任何帮助都将不胜感激
我正在尝试修改以使其呈现不同颜色的多个间隔:
import Color exposing (red, blue, yellow)
import Graphics.Element exposing (Element, color, spacer, flow, right)
colors = [ yellow, red, blue ]
presentColors : List Element
presentColors = List.map (color ??? (spacer 30 30))
例如,我需要在页面上设置计时器。所以我可以每100毫秒做一次动作
type Action = Tick Time
我的模型中有字段时间。模型可能很大,但由于时间场的原因,我需要每100毫秒重新创建一次模型和整个视图。我认为,从绩效角度来看,这将是无效的
还有其他方法吗?或者我不应该担心这种事情吗?不一定每次都会重新创建整个视图。Elm使用了一个和diff来只更改实际DOM的最小值。如果你的视图的很大一部分实际上每100毫秒就改变一次,那么这显然会引起问题,但我猜你只是每100毫秒做一次较小的调
我正在构建一个应用程序,它将使用elm架构中elm定义的一些任务
有没有一种方法可以独立地对这些任务进行单元测试,而不必测试整个应用程序
我已经在使用elm community/elm test包对函数进行单元测试,但是现在如何进行测试任务呢。如何执行这些任务和等待的响应,然后将其与某个预期值进行比较?您可以编写一个简单的程序,遍历命令列表(包装任务)和预期结果消息,根据预期内容检查实际收到的消息。init函数发出列表中的第一个命令,而update函数验证收到的下一条消息,然后发出下一次测试的命
考虑这一功能:
mix : Color -> Color -> Color
mix c1 c2 =
let
{ red, green, blue, alpha } = toRgb c1
{ red, green, blue, alpha } = toRgb c2
in
...
上述方法不起作用,因为它引入了重复的变量名是否可以将上述值分解为r1、r2、g1、g2等?
为澄清起见,toRgb有以下签名:
toRgb :
我想制作一个HTML表单,它实际上使用ELM中的[form]标记。在线示例中没有一个这样做——它们只是将[input]标记放在[div]中而不是[form]中
当我尝试将我的Elm应用程序切换到[form]时,我的[input type=sumbit]标记似乎不会调用Elm。提交尝试离开页面并向我的url添加“?”
有没有关于如何做到这一点的提示
原因:我想成为一个使用[form]的用户,这样我就可以在一些[input]字段上使用“required”属性。这只是我验证的一部分,但我喜欢“必需”标
我可以这样定义标记的联合类型:
type Msg
= Sort (Product -> Float)
但我不能这样定义:
type Msg
= Sort (Product -> comparable)
错误显示:
类型Msg必须声明其使用类型变量comparable
但是Compariable是一个预定义的类型变量,对吗
如何修复此问题?您得到的错误是,comparable是未绑定的变量类型。您需要在右侧完全指定它(例如,Product->Int),或者在左侧指定您希望它
我是埃尔姆的新手。我有一个网站有两个页面:主页和注册
Home有自己的视图,Signup有自己的视图,但它们都返回Html Msg。我想更改它,以便Home返回HTMLHomeMsg,而Signup返回HTMLSignupMsg
编写这些视图函数当然很容易,但我认为我的顶级视图函数需要将结果转换为Html Msg
这是Msg类型
type Msg
= Home HomeMsg
| Signup SignupMsg
| OnLocationChange Location
我想我需要
我一直在拼命寻找一个css框架来与ELM很好地合作。我发现了一个名为UIKit的工具,它声称可以监视DOM并自动初始化,等等。但是,我注意到在html标记中,有类似于ukclose的文本显示在这里。有没有办法用Elm来渲染这个?文本函数无法工作,因为它返回了错误的类型
<button type="button" uk-close></button>
<a href="" uk-close></a>
除此之外,是否有人知道一个框架可以顺利地与
1 2 3 4 5 6 ...
下一页 最后一页 共 12 页