如何存储此返回类型:[(x,y)]?

Nic*_*unt 1 haskell

我有这样的功能:

example           :: [Char] -> [Char]
example myString  = ...................
                    where
                      pat        = "something"
                      returnList = myString =~ pat :: [(MatchOffset,MatchLength)]
Run Code Online (Sandbox Code Playgroud)

我的问题是我不知道如何存储我从调用中返回的值 myString =~ pat :: [(MatchOffset,MatchLength)]

我不能像在这里一样将它存储在单个变量名中,但我不确定如何存储它.

它目前给出了这个错误:

No instance for (RegexContext
                   Regex [Char] [(MatchOffset, MatchLength)])
  arising from a use of `=~'
Possible fix:
  add an instance declaration for
  (RegexContext Regex [Char] [(MatchOffset, MatchLength)])
In the expression: myString =~ pat :: [(MatchOffset, MatchLength)]
In an equation for `returnList':
    returnList = myString =~ pat :: [(MatchOffset, MatchLength)]
In an equation for `example':
    example myString
      = ....................
      where
          pat = "something"
          returnList = myString =~ pat :: [(MatchOffset, MatchLength)]
Run Code Online (Sandbox Code Playgroud)

Ant*_*tti 5

查看可用于RegexLike类的实例,您想要的值可能是类型AllMatches [] (MatchOffset, MatchLength),它只是将元组列表包装(MatchOffset, MatchLength)为newtype.然后可以使用该getAllMatches功能访问该列表.所以你可以这样做:

returnList = getAllMatches (myString =~ pat) :: [(MatchOffset,MatchLength)]
Run Code Online (Sandbox Code Playgroud)