无法导入Data.List。\\

时间:2018-06-10 14:57:20

标签: haskell import operators

我正在尝试编写一个使用Data.List中的set difference运算符的Haskell模块,但是当我尝试导入它时,我在尝试导入模块时收到消息module SetDiff ( setDiff ) where -- import Data.List -- No error when this line is used import Data.List (\\) -- Causes the parse error setDiff l1 l2 = l1 \\ l2

这是一个具有相同问题的示例模块:

Data.List

导入所有\\可以避免此问题,但是我是否可以执行导入,只指定using EIOBoardMobile.Model; using System; using System.Collections.Generic; using System.Collections.ObjectModel; using System.Linq; using System.Text; using System.Threading.Tasks; using Xamarin.Forms; using Xamarin.Forms.Xaml; namespace EIOBoardMobile.Views { [XamlCompilation(XamlCompilationOptions.Compile)] public partial class BoardUserPage : ContentPage { public class UserProp { public string userprop { get; set; } public string uservalue { get; set; } } public ObservableCollection<UserProp> SelectedUserProps { get; set; } = new ObservableCollection<UserProp>(); public BoardUserPage(MobileBoardUser selectedUser) { InitializeComponent(); BindingContext = this; foreach (var prop in selectedUser.GetType().GetProperties()) { if (prop.GetValue(selectedUser).GetType() == typeof(String)) { UserProp NewUserProp = new UserProp { userprop = prop.Name.ToString(), uservalue = prop.GetValue(selectedUser).ToString() }; SelectedUserProps.Add(NewUserProp); } } } } } 运算符?

1 个答案:

答案 0 :(得分:4)

\\运算符,会在窗帘后面调用相应的 (\\) :: Eq a => [a] -> [a] -> [a]函数,因此您需要导入功能名称,包括括号

import Data.List ((\\))

毕竟,您导入了一个函数列表(以及其他元素,如类型,类型类等),以及&#34; 名称&#34;功能是 (\\) ,而不是\\

因此,在外部括号之间,我们列出了我们要导入的函数,而内部括号,则不作为&#34; groupers&#34;或者一些独立的句法元素,仅作为函数名称的一部分。

例如:

Prelude> import Data.List ((\\))
Prelude Data.List> [1, 4, 2, 5] \\ [1, 3, 0, 2]
[4,5]

请注意,您可以将setDiff功能声明为:

setDiff :: Eq a => [a] -> [a] -> [a]
setDiff = (\\)

所以没有参数。