部分应用于特定参数槽
Partial application to a specific parameter slot
你好我想知道是否可以在特定位置为方法提供参数以供进一步使用point-free-notation
:
readData::Text->[Int]
readData =catMaybes . maybeValues where
maybeValues=mvalues.split.filterText
filterText::Text->[Char]->Text
filterText tx chars=Data.Text.filter (\x -> not (x `elem` chars)) tx
如何只向 filterText
提供 2
-nd 参数?像这样:
filterText "astr"
其中 astr
是 [Char]
参数(第二个位置)。
一般来说,如果有方法 mymethod par1 par2 par3
我可以使用它:
mymethod par2
并以某种方式绑定第二个参数而不是第一个参数。
pointfree.io 将帮助解决所有这些问题,例如,当
要求
\x -> method x par2
它产生
flip method par2
和
\x y z -> f x y z value
它产生
flip flip value . (flip .) . f
虽然在我看来可读性有所不同。
您可以为此使用 flip :: (a -> b -> c) -> b -> a -> c
:使用 flip
可以获取函数,因此可以使用 "flip" 参数。然后您可以部分应用一个参数:第二个参数。
因此在这种特定情况下,您可以使用:
foo :: Text -> Text
foo = flip filterText "astr"
您也可以改进 filterText
:
filterText::Text -> [Char] -> Text
filterText tx chars = Data.Text.filter (`notElem` chars) tx
甚至:
filterText::Text -> [Char] -> Text
filterText = flip (Data.Text.filter . flip notElem)
我会避免 flip
作为一般规则,但是 仅提供第二个参数 可以通过将其视为中缀运算符来轻松完成命名函数,并且分段:
(`filterText` "astr")
同样,该函数中的 lambda 可以简化为
(not . (`elem` chars))
(或更进一步 (`notElem` chars)
)。
但通常当您发现自己处于这种情况时,值得考虑是否应该首先使用翻转参数定义函数。
filterText :: [Char] -> Text -> Text
filterText chars = Data.Text.filter (`notElem` chars)
请注意,我可以免费减少 tx
参数,现在您可以只写 filterText "astr"
.
你好我想知道是否可以在特定位置为方法提供参数以供进一步使用point-free-notation
:
readData::Text->[Int]
readData =catMaybes . maybeValues where
maybeValues=mvalues.split.filterText
filterText::Text->[Char]->Text
filterText tx chars=Data.Text.filter (\x -> not (x `elem` chars)) tx
如何只向 filterText
提供 2
-nd 参数?像这样:
filterText "astr"
其中 astr
是 [Char]
参数(第二个位置)。
一般来说,如果有方法 mymethod par1 par2 par3
我可以使用它:
mymethod par2
并以某种方式绑定第二个参数而不是第一个参数。
pointfree.io 将帮助解决所有这些问题,例如,当 要求
\x -> method x par2
它产生
flip method par2
和
\x y z -> f x y z value
它产生
flip flip value . (flip .) . f
虽然在我看来可读性有所不同。
您可以为此使用 flip :: (a -> b -> c) -> b -> a -> c
:使用 flip
可以获取函数,因此可以使用 "flip" 参数。然后您可以部分应用一个参数:第二个参数。
因此在这种特定情况下,您可以使用:
foo :: Text -> Text
foo = flip filterText "astr"
您也可以改进 filterText
:
filterText::Text -> [Char] -> Text
filterText tx chars = Data.Text.filter (`notElem` chars) tx
甚至:
filterText::Text -> [Char] -> Text
filterText = flip (Data.Text.filter . flip notElem)
我会避免 flip
作为一般规则,但是 仅提供第二个参数 可以通过将其视为中缀运算符来轻松完成命名函数,并且分段:
(`filterText` "astr")
同样,该函数中的 lambda 可以简化为
(not . (`elem` chars))
(或更进一步 (`notElem` chars)
)。
但通常当您发现自己处于这种情况时,值得考虑是否应该首先使用翻转参数定义函数。
filterText :: [Char] -> Text -> Text
filterText chars = Data.Text.filter (`notElem` chars)
请注意,我可以免费减少 tx
参数,现在您可以只写 filterText "astr"
.