私はJSからライブラリを移植しようとしていますが、文字列または文字列のリストを取ることができる関数になっています。文字列が与えられた場合、それは文字列のリストに分割され、最初にその文字列が渡されたかのように処理されます。関数をElmで複数の型にすることはできますか?オーバーロードされた機能を使用できますか?
自分のタイプを定義することで並べ替えることができますが、APIが醜いものになり、カスタムタイプのプレフィックスが必要になります。
type DocumentBody = Raw String | Words List String
tokenize: DocumentBody -> List String
tokenize s =
case s of
Raw str_body -> String.split " " str_body |> (List.map String.toLower)
Words list_body -> List.map String.toLower list_body
-- Tests
tests =
suite "Tokenizer"
[ test "simple" <| assertEqual ["this", "is", "a", "simple", "string"]
<| tokenize (Raw "this is a simple string")
, test "downcasing tokens: string" <| assertEqual ["foo", "bar"]
<| tokenize (Raw "FOO BAR")
, test "downcasing tokens: list of str" <| assertEqual ["foo", "bar"]
<| tokenize (Words ["Foo", "BAR"])
]
最終的に、私はポートが行動のこの種をサポートしなければならないということはないと思うが、どのようにタイプの単なる列挙であなたパターンマッチを行う代わりに:ここで
は、私が持っているものです私の例ではプレフィックスRaw
またはWords
が必要ですか?
"...あなたは関数の署名を複製することはできません..."またはむしろそれらの完全な欠落を複製します;) –
あなたのポイントに、呼び出し側は 'DocumentBody'が何であるか知る必要があります。それはこの関数がとるタイプなので、 'Raw'と' Words'タイプのプレフィックスを公開するのは意味があります。 –
これはポートではっきりと行われたものではないので、私はそれを別々の機能。 –