我正在尝试编写一个使用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);
}
}
}
}
}
运算符?
答案 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 = (\\)
所以没有参数。