我有以下函数toTF,给定一些上下文和一个项目,给出一个消耗一个输入,一个输入状态并产生下一个状态的函数:
Erlang/OTP 19 [erts-8.2] [source] [64-bit] [smp:8:8] [async-threads:10] [hipe] [kernel-poll:false]
Compiling 3 files (.ex)
== Compilation error on file lib/test/mystuff.ex ==
** (CompileError) lib/test/mystuff.ex:1: cannot define module Test.Mystuff because it is currently being defined in lib/mystuff.ex:1
(stdlib) erl_eval.erl:670: :erl_eval.do_apply/6
我正在尝试实现Token的这个东西的实例,它产生一个函数,它将令牌的文字值,词干和词性的识别器应用于,如果一切正常,则接受此令牌,否则失败。
这是我尝试过的实例声明:
class TFSource s' where
type S s' :: *
type I s' :: *
type O s' :: *
toTF :: Context -> s' -> TFSig (S s') (I s') (O s')
type TFSig s i o = [i] -> s -> Output s i o
如何确保litTF和stemTF在使用相同的ctx和令牌值的toTF调用时共享(memoized?)?
答案 0 :(得分:3)
一般来说,这很难做到。
一种可能性是重构你的类型类,以便它提供一个没有参数的单个备忘录,懒惰包含所有可能的标记的结果。为此,您可以使用类似https://hackage.haskell.org/package/MemoTrie的内容。但这假设您可以将ctx
实际视为地图中的某个域,这可能是不可能的。