diff --git a/Bindings/Friso/Raw.hsc b/Bindings/Friso/Raw.hsc
new file mode 100644
--- /dev/null
+++ b/Bindings/Friso/Raw.hsc
@@ -0,0 +1,189 @@
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+#include <bindings.dsl.h>
+#include <friso/friso.h>
+module Bindings.Friso.Raw where
+import Foreign.Ptr
+#strict_import
+
+import Bindings.Friso.Raw.FrisoAPI
+{- typedef enum {
+            __LEX_CJK_WORDS__ = 0,
+            __LEX_CJK_UNITS__ = 1,
+            __LEX_ECM_WORDS__ = 2,
+            __LEX_CEM_WORDS__ = 3,
+            __LEX_CN_LNAME__ = 4,
+            __LEX_CN_SNAME__ = 5,
+            __LEX_CN_DNAME1__ = 6,
+            __LEX_CN_DNAME2__ = 7,
+            __LEX_CN_LNA__ = 8,
+            __LEX_STOPWORDS__ = 9,
+            __LEX_ENPUN_WORDS__ = 10,
+            __LEX_EN_WORDS__ = 11,
+            __LEX_OTHER_WORDS__ = 15,
+            __LEX_NCSYN_WORDS__ = 16,
+            __LEX_PUNC_WORDS__ = 17,
+            __LEX_UNKNOW_WORDS__ = 18
+        } friso_lex_t; -}
+#integral_t friso_lex_t
+#num __LEX_CJK_WORDS__
+#num __LEX_CJK_UNITS__
+#num __LEX_ECM_WORDS__
+#num __LEX_CEM_WORDS__
+#num __LEX_CN_LNAME__
+#num __LEX_CN_SNAME__
+#num __LEX_CN_DNAME1__
+#num __LEX_CN_DNAME2__
+#num __LEX_CN_LNA__
+#num __LEX_STOPWORDS__
+#num __LEX_ENPUN_WORDS__
+#num __LEX_EN_WORDS__
+#num __LEX_OTHER_WORDS__
+#num __LEX_NCSYN_WORDS__
+#num __LEX_PUNC_WORDS__
+#num __LEX_UNKNOW_WORDS__
+{- typedef friso_hash_t * friso_dic_t; -}
+#synonym_t friso_dic_t , <friso_hash_cdt>
+{- typedef struct {
+            uchar_t length;
+            uchar_t rlen;
+            uchar_t type;
+            uchar_t ctrlMask;
+            uint_t offset;
+            fstring word;
+            friso_array_t syn;
+            friso_array_t pos;
+            uint_t fre;
+        } lex_entry_cdt; -}
+#starttype lex_entry_cdt
+#field length , CUChar
+#field rlen , CUChar
+#field type , CUChar
+#field ctrlMask , CUChar
+#field offset , CUInt
+#field word , CString
+#field syn , <friso_array_entry>
+#field pos , <friso_array_entry>
+#field fre , CUInt
+#stoptype
+{- typedef lex_entry_cdt * lex_entry_t; -}
+#synonym_t lex_entry_t , <lex_entry_cdt>
+{- typedef enum {
+            FRISO_UTF8 = 0, FRISO_GBK = 1
+        } friso_charset_t; -}
+#integral_t friso_charset_t
+#num FRISO_UTF8
+#num FRISO_GBK
+{- typedef struct {
+            friso_dic_t dic; friso_charset_t charset;
+        } friso_entry; -}
+#starttype friso_entry
+#field dic , <friso_hash_cdt>
+#field charset , <friso_charset_t>
+#stoptype
+{- typedef friso_entry * friso_t; -}
+#synonym_t friso_t , <friso_entry>
+{- typedef enum {
+            __FRISO_SIMPLE_MODE__ = 1, __FRISO_COMPLEX_MODE__ = 2
+        } friso_mode_t; -}
+#integral_t friso_mode_t
+#num __FRISO_SIMPLE_MODE__
+#num __FRISO_COMPLEX_MODE__
+{- typedef struct {
+            ushort_t max_len;
+            ushort_t r_name;
+            ushort_t mix_len;
+            ushort_t lna_len;
+            ushort_t add_syn;
+            ushort_t clr_stw;
+            ushort_t keep_urec;
+            ushort_t spx_out;
+            ushort_t en_sseg;
+            ushort_t st_minl;
+            uint_t nthreshold;
+            friso_mode_t mode;
+            char kpuncs[13];
+        } friso_config_entry; -}
+#starttype friso_config_entry
+#field max_len , CUShort
+#field r_name , CUShort
+#field mix_len , CUShort
+#field lna_len , CUShort
+#field add_syn , CUShort
+#field clr_stw , CUShort
+#field keep_urec , CUShort
+#field spx_out , CUShort
+#field en_sseg , CUShort
+#field st_minl , CUShort
+#field nthreshold , CUInt
+#field mode , <friso_mode_t>
+#array_field kpuncs , CString
+#stoptype
+{- typedef friso_config_entry * friso_config_t; -}
+#synonym_t friso_config_t , <friso_config_entry>
+{- typedef struct {
+            uchar_t type;
+            uchar_t length;
+            uchar_t rlen;
+            char pos;
+            int offset;
+            char word[128];
+        } friso_hits_entry; -}
+#starttype friso_hits_entry
+#field type , CUChar
+#field length , CUChar
+#field rlen , CUChar
+#field pos , CString
+#field offset , CInt
+#array_field word , CString
+#stoptype
+{- typedef friso_hits_entry * friso_hits_t; -}
+#synonym_t friso_hits_t , <friso_hits_entry>
+{- typedef struct {
+            fstring text;
+            uint_t idx;
+            uint_t length;
+            uint_t bytes;
+            uint_t unicode;
+            uint_t ctrlMask;
+            friso_link_t pool;
+            string_buffer_t sbuf;
+            friso_hits_t hits;
+            char buffer[7];
+        } friso_task_entry; -}
+#starttype friso_task_entry
+#field text , CString
+#field idx , CUInt
+#field length , CUInt
+#field bytes , CUInt
+#field unicode , CUInt
+#field ctrlMask , CUInt
+#field pool , <friso_link_entry>
+#field sbuf , <string_buffer_entry>
+#field hits , <friso_hits_entry>
+#array_field buffer , CString
+#stoptype
+{- typedef friso_task_entry * friso_task_t; -}
+#synonym_t friso_task_t , <friso_task_entry>
+#ccall friso_new , IO (Ptr <friso_entry>)
+#ccall friso_init_from_ifile , Ptr <friso_entry> -> Ptr <friso_config_entry> -> CString -> IO CInt
+#ccall friso_free , Ptr <friso_entry> -> IO ()
+#ccall friso_new_config , IO (Ptr <friso_config_entry>)
+#ccall friso_init_config , Ptr <friso_config_entry> -> IO ()
+#ccall friso_new_task , IO (Ptr <friso_task_entry>)
+#ccall friso_free_task , Ptr <friso_task_entry> -> IO ()
+#ccall friso_new_hits , IO (Ptr <friso_hits_entry>)
+#ccall friso_set_text , Ptr <friso_task_entry> -> CString -> IO ()
+#ccall friso_next , Ptr <friso_entry> -> Ptr <friso_config_entry> -> Ptr <friso_task_entry> -> IO (Ptr <friso_hits_entry>)
+#ccall friso_dic_new , IO (Ptr <friso_hash_cdt>)
+-- #ccall file_get_line , CString -> Ptr <struct _IO_FILE> -> IO CString
+#ccall friso_dic_free , Ptr <friso_hash_cdt> -> IO ()
+#ccall new_lex_entry , CString -> Ptr <friso_array_entry> -> CUInt -> CUInt -> CUInt -> IO (Ptr <lex_entry_cdt>)
+#ccall free_lex_entry , Ptr <lex_entry_cdt> -> IO ()
+#ccall friso_dic_load , Ptr <friso_entry> -> Ptr <friso_config_entry> -> Ptr <friso_lex_t> -> CString -> CUInt -> IO ()
+#ccall friso_dic_load_from_ifile , Ptr <friso_entry> -> Ptr <friso_config_entry> -> CString -> CUInt -> IO ()
+#ccall friso_dic_add , Ptr <friso_hash_cdt> -> Ptr <friso_lex_t> -> CString -> Ptr <friso_array_entry> -> IO ()
+#ccall friso_dic_add_with_fre , Ptr <friso_hash_cdt> -> Ptr <friso_lex_t> -> CString -> Ptr <friso_array_entry> -> CUInt -> IO ()
+#ccall friso_dic_match , Ptr <friso_hash_cdt> -> Ptr <friso_lex_t> -> CString -> IO CInt
+#ccall friso_dic_get , Ptr <friso_hash_cdt> -> Ptr <friso_lex_t> -> CString -> IO (Ptr <lex_entry_cdt>)
+#ccall friso_spec_dic_size , Ptr <friso_hash_cdt> -> Ptr <friso_lex_t> -> IO CUInt
+#ccall friso_all_dic_size , Ptr <friso_hash_cdt> -> IO CUInt
diff --git a/Bindings/Friso/Raw/FrisoAPI.hsc b/Bindings/Friso/Raw/FrisoAPI.hsc
new file mode 100644
--- /dev/null
+++ b/Bindings/Friso/Raw/FrisoAPI.hsc
@@ -0,0 +1,148 @@
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+#include <bindings.dsl.h>
+#include <friso/friso_API.h>
+module Bindings.Friso.Raw.FrisoAPI where
+import Foreign.Ptr
+#strict_import
+
+{- typedef unsigned short ushort_t; -}
+#synonym_t ushort_t , CUShort
+{- typedef unsigned char uchar_t; -}
+#synonym_t uchar_t , CUChar
+{- typedef unsigned int uint_t; -}
+#synonym_t uint_t , CUInt
+{- typedef char * fstring; -}
+#synonym_t fstring , CString
+{- typedef struct {
+            fstring buffer; uint_t length; uint_t allocs;
+        } string_buffer_entry; -}
+#starttype string_buffer_entry
+#field buffer , CString
+#field length , CUInt
+#field allocs , CUInt
+#stoptype
+{- typedef string_buffer_entry * string_buffer_t; -}
+#synonym_t string_buffer_t , <string_buffer_entry>
+#ccall new_string_buffer_with_opacity , CUInt -> IO (Ptr <string_buffer_entry>)
+#ccall new_string_buffer_with_string , CString -> IO (Ptr <string_buffer_entry>)
+#ccall string_buffer_append , Ptr <string_buffer_entry> -> CString -> IO ()
+#ccall string_buffer_append_char , Ptr <string_buffer_entry> -> CString -> IO ()
+#ccall string_buffer_insert , (Ptr <string_buffer_entry>) -> CUInt -> CString -> IO ()
+#ccall string_buffer_remove , Ptr <string_buffer_entry> -> CUInt -> CUInt -> IO CString
+#ccall string_buffer_trim , Ptr <string_buffer_entry> -> IO (Ptr <string_buffer_entry>)
+#ccall string_buffer_devote , Ptr <string_buffer_entry> -> IO CString
+#ccall string_buffer_clear , Ptr <string_buffer_entry> -> IO ()
+#ccall free_string_buffer , Ptr <string_buffer_entry> -> IO ()
+{- typedef struct {
+            fstring source;
+            uint_t srcLen;
+            fstring delimiter;
+            uint_t delLen;
+            uint_t idx;
+        } string_split_entry; -}
+#starttype string_split_entry
+#field source , CString
+#field srcLen , CUInt
+#field delimiter , CString
+#field delLen , CUInt
+#field idx , CUInt
+#stoptype
+{- typedef string_split_entry * string_split_t; -}
+#synonym_t string_split_t , <string_split_entry>
+#ccall new_string_split , CString -> CString -> IO (Ptr <string_split_entry>)
+#ccall string_split_reset , Ptr <string_split_entry> -> CString -> CString -> IO ()
+#ccall string_split_set_source , Ptr <string_split_entry> -> CString -> IO ()
+#ccall string_split_set_delimiter , Ptr <string_split_entry> -> CString -> IO ()
+#ccall free_string_split , Ptr <string_split_entry> -> IO ()
+#ccall string_split_next , Ptr <string_split_entry> -> CString -> IO CString
+{- typedef struct {
+            void * * items; uint_t allocs; uint_t length;
+        } friso_array_entry; -}
+#starttype friso_array_entry
+#field items , Ptr (Ptr ())
+#field allocs , CUInt
+#field length , CUInt
+#stoptype
+{- typedef friso_array_entry * friso_array_t; -}
+#synonym_t friso_array_t , <friso_array_entry>
+#ccall new_array_list_with_opacity , CUInt -> IO (Ptr <friso_array_entry>)
+#ccall free_array_list , Ptr <friso_array_entry> -> IO ()
+#ccall array_list_add , Ptr <friso_array_entry> -> Ptr () -> IO ()
+#ccall array_list_insert , Ptr <friso_array_entry> -> CUInt -> Ptr () -> IO ()
+#ccall array_list_get , Ptr <friso_array_entry> -> CUInt -> IO (Ptr ())
+#ccall array_list_set , Ptr <friso_array_entry> -> CUInt -> Ptr () -> IO (Ptr ())
+#ccall array_list_remove , Ptr <friso_array_entry> -> CUInt -> IO (Ptr ())
+#ccall array_list_trim , Ptr <friso_array_entry> -> IO (Ptr <friso_array_entry>)
+#ccall array_list_clear , Ptr <friso_array_entry> -> IO (Ptr <friso_array_entry>)
+{- struct friso_link_node {
+    void * value;
+    struct friso_link_node * prev;
+    struct friso_link_node * next;
+}; -}
+#starttype struct friso_link_node
+#field value , Ptr ()
+#field prev , Ptr <struct friso_link_node>
+#field next , Ptr <struct friso_link_node>
+#stoptype
+{- typedef struct friso_link_node link_node_entry; -}
+#synonym_t link_node_entry , <struct friso_link_node>
+{- typedef link_node_entry * link_node_t; -}
+#synonym_t link_node_t , <struct friso_link_node>
+{- typedef struct {
+            link_node_t head; link_node_t tail; uint_t size;
+        } friso_link_entry; -}
+#starttype friso_link_entry
+#field head , <struct friso_link_node>
+#field tail , <struct friso_link_node>
+#field size , CUInt
+#stoptype
+{- typedef friso_link_entry * friso_link_t; -}
+#synonym_t friso_link_t , <friso_link_entry>
+#ccall new_link_list , IO (Ptr <friso_link_entry>)
+#ccall free_link_list , Ptr <friso_link_entry> -> IO ()
+#ccall link_list_clear , Ptr <friso_link_entry> -> IO (Ptr <friso_link_entry>)
+#ccall link_list_add , Ptr <friso_link_entry> -> Ptr () -> IO ()
+#ccall link_list_insert_before , Ptr <friso_link_entry> -> CUInt -> Ptr () -> IO ()
+#ccall link_list_get , Ptr <friso_link_entry> -> CUInt -> IO (Ptr ())
+#ccall link_list_set , Ptr <friso_link_entry> -> CUInt -> Ptr () -> IO (Ptr ())
+#ccall link_list_remove , Ptr <friso_link_entry> -> CUInt -> IO (Ptr ())
+#ccall link_list_remove_node , Ptr <friso_link_entry> -> (Ptr <struct friso_link_node>) -> IO (Ptr ())
+#ccall link_list_remove_first , Ptr <friso_link_entry> -> IO (Ptr ())
+#ccall link_list_remove_last , Ptr <friso_link_entry> -> IO (Ptr ())
+#ccall link_list_add_last , Ptr <friso_link_entry> -> Ptr () -> IO ()
+#ccall link_list_add_first , Ptr <friso_link_entry> -> Ptr () -> IO ()
+{- struct hash_entry {
+    fstring _key; void * _val; struct hash_entry * _next;
+}; -}
+#starttype struct hash_entry
+#field _key , CString
+#field _val , Ptr ()
+#field _next , Ptr <struct hash_entry>
+#stoptype
+{- typedef struct hash_entry friso_hash_entry; -}
+#synonym_t friso_hash_entry , <struct hash_entry>
+{- typedef friso_hash_entry * hash_entry_t; -}
+#synonym_t hash_entry_t , <struct hash_entry>
+#callback fhash_callback_fn_t , Ptr <struct hash_entry> -> IO ()
+{- typedef struct {
+            uint_t length;
+            uint_t size;
+            float factor;
+            uint_t threshold;
+            hash_entry_t * table;
+        } friso_hash_cdt; -}
+#starttype friso_hash_cdt
+#field length , CUInt
+#field size , CUInt
+#field factor , CFloat
+#field threshold , CUInt
+#field table , Ptr <struct hash_entry>
+#stoptype
+{- typedef friso_hash_cdt * friso_hash_t; -}
+#synonym_t friso_hash_t , <friso_hash_cdt>
+#ccall new_hash_table , IO (Ptr <friso_hash_cdt>)
+#ccall free_hash_table , Ptr <friso_hash_cdt> -> <fhash_callback_fn_t> -> IO ()
+#ccall hash_put_mapping , Ptr <friso_hash_cdt> -> CString -> Ptr () -> IO ()
+#ccall hash_exist_mapping , Ptr <friso_hash_cdt> -> CString -> IO CInt
+#ccall hash_get_value , Ptr <friso_hash_cdt> -> CString -> IO (Ptr ())
+#ccall hash_remove_mapping , Ptr <friso_hash_cdt> -> CString -> IO (Ptr <struct hash_entry>)
diff --git a/LICENSE b/LICENSE
new file mode 100644
--- /dev/null
+++ b/LICENSE
@@ -0,0 +1,13 @@
+Copyright 2014 cosmo0920
+
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
diff --git a/README.md b/README.md
new file mode 100644
--- /dev/null
+++ b/README.md
@@ -0,0 +1,28 @@
+Binding-friso
+===
+
+[![Build Status](https://travis-ci.org/cosmo0920/bindings-friso.svg?branch=master)](https://travis-ci.org/cosmo0920/bindings-friso)
+
+Low level Haskell binding for friso.
+
+## dependencies
+
+* friso
+* hsc2hs
+
+## export module(s)
+
+* Bindings.Friso.Raw
+* Bindings.Friso.Raw.FrisoAPI
+
+## cbits
+
+No longer provided, but example implementation exists under example. Perhaps you should implement yourself using this binding.
+
+## dependent libraries
+
+### friso
+
+* [Friso](https://code.google.com/p/friso/)
+
+friso中文分词器
diff --git a/Setup.hs b/Setup.hs
new file mode 100644
--- /dev/null
+++ b/Setup.hs
@@ -0,0 +1,2 @@
+import Distribution.Simple
+main = defaultMain
diff --git a/bindings-friso.cabal b/bindings-friso.cabal
new file mode 100644
--- /dev/null
+++ b/bindings-friso.cabal
@@ -0,0 +1,32 @@
+-- Initial hs-Groonga.cabal generated by cabal init.  For further
+-- documentation, see http://haskell.org/cabal/users-guide/
+
+name:                  bindings-friso
+version:               0.1.0.0
+synopsis:              Low level bindings for friso
+description:           Bindings to Friso  <https://code.google.com/p/friso/>.
+license:               Apache-2.0
+license-file:          LICENSE
+author:                cosmo0920
+maintainer:            cosmo0920.wp@gmail.com
+category:              FFI
+build-type:            Simple
+stability:             Experimental
+extra-source-files:    README.md
+cabal-version:         >=1.10
+
+library
+  exposed-modules:     Bindings.Friso.Raw
+                       Bindings.Friso.Raw.FrisoAPI
+  build-depends:       base          >= 4.5 && < 5
+                     , bindings-DSL  >= 1.0 && < 1.2
+  hs-source-dirs:      .
+  build-tools:         hsc2hs
+  default-language:    Haskell2010
+  default-extensions:  GeneralizedNewtypeDeriving
+                       ForeignFunctionInterface
+                       CPP
+  extra-libraries:     friso
+source-repository head
+  type: git
+  location: git://github.com/cosmo0920/bindings-friso.git
